ストアを開くために使用されるモデルは、ストアを作成するために使用されるものと互換性がありません


181

Xcode 3.2でCore Dataモデルを作成し、Xcode 4.2でアップグレードした後、NSManagedObjectサブクラスの新しいエンティティを追加しました(新しいエンティティを参照)。

まず、古いグループと同じグループではないため、奇妙に見えます。ここに私のxcode 4.2の写真があります(AlkitabDBはxcode 3.2で作成したもので、EndeDBは現在のxcodeバージョン(4.2)からの新しいものです:

新しいエンティティがxdatamodelにグループ化されていない

2つ目は、そのままにして、最初のエンティティ(古いエンティティ)と同じ方法で2番目のエンティティ(新しいエンティティ)にアクセスすると、タイトルのエラーが表示されます。

ここにエラーがあります:

2012-01-16 21:13:38.496 iHuria[55953:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x8829cd0 {metadata=<CFBasicHash 0x882a370 [0x1839b38]>{type = immutable dict, count = 7,
entries =>
    2 : <CFString 0x8829b90 [0x1839b38]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x8829ff0 [0x1839b38]>{type = immutable, count = 0, values = ()}
    4 : <CFString 0x8829bc0 [0x1839b38]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x8829770 [0x1839b38]>{value = +320, type = kCFNumberSInt64Type}
    6 : <CFString 0x8829bf0 [0x1839b38]>{contents = "NSStoreModelVersionHashes"} = <CFBasicHash 0x882a080 [0x1839b38]>{type = immutable dict, count = 1,
entries =>
    0 : <CFString 0x882a010 [0x1839b38]>{contents = "AlkitabDB"} = <CFData 0x882a030 [0x1839b38]>{length = 32, capacity = 32, bytes = 0xd02ac5f8be6ab0b39add450aca202ac0 ... 3d45d462998d2ccd}
}

    7 : <CFString 0x10e3aa8 [0x1839b38]>{contents = "NSStoreUUID"} = <CFString 0x8829e60 [0x1839b38]>{contents = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59"}
    8 : <CFString 0x10e3948 [0x1839b38]>{contents = "NSStoreType"} = <CFString 0x10e3958 [0x1839b38]>{contents = "SQLite"}
    9 : <CFString 0x8829c40 [0x1839b38]>{contents = "NSStoreModelVersionHashesVersion"} = <CFNumber 0x6b1c7c0 [0x1839b38]>{value = +3, type = kCFNumberSInt32Type}
    10 : <CFString 0x8829c70 [0x1839b38]>{contents = "_NSAutoVacuumLevel"} = <CFString 0x882a0c0 [0x1839b38]>{contents = "2"}
}
, reason=The model used to open the store is incompatible with the one used to create the store}, {
    metadata =     {
        NSPersistenceFrameworkVersion = 320;
        NSStoreModelVersionHashes =         {
            AlkitabDB = <d02ac5f8 be6ab0b3 9add450a ca202ac0 ebd1e860 cbb578c2 3d45d462 998d2ccd>;
        };
        NSStoreModelVersionHashesVersion = 3;
        NSStoreModelVersionIdentifiers =         (
        );
        NSStoreType = SQLite;
        NSStoreUUID = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59";
        "_NSAutoVacuumLevel" = 2;
    };
    reason = "The model used to open the store is incompatible with the one used to create the store";
}

以前に解決策を探したところ、アプリをシミュレーターから削除してアプリを再実行する必要があることがわかりましたが、機能しませんでした。誰かがこの問題の解決策を知っていますか?助けてください。

回答:


294

アプリを削除することが適切でない場合があります!提案、あなたのアプリはすでに公開されています!新しいエンティティをデータベースに追加して先に進むことはできません。移行を実行する必要があります。

ドキュメントを掘り下げたくない、そして簡単な修正を探している人のために:

  1. .xcdatamodeldファイルを開きます
  2. エディターをクリックします
  3. [モデルバージョンを追加...]を選択します。
  4. モデルの新しいバージョンを追加します(追加されたデータモデルの新しいグループ)
  5. メインファイルを選択し、ファイルインスペクターを開きます(右側のパネル)
  6. そして下には、Versioned core data model現在のデータモデルのデータモデルの新しいバージョンを選択します
  7. それだけではありません)いわゆる「ライトマイグレーション」を実行する必要があります。
  8. あなたのAppDelegateところへ行き、それpersistentStoreCoordinatorが作成されている場所を見つけてください
  9. この行を見つける if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
  10. nilオプションを@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}(実際にそのメソッドのコメント付きコードで提供される)に置き換えます。
  11. さあ、楽しみましょう!

PSこれは軽量移行にのみ適用されます。移行を軽量移行とみなすには、変更をこの狭い範囲に限定する必要があります。

  • プロパティ(属性または関係)を追加または削除します。
  • オプションのプロパティをオプションにします。
  • デフォルト値を指定する限り、オプション属性を非オプションにします。
  • エンティティを追加または削除します。
  • プロパティの名前を変更します。
  • エンティティの名前を変更します。

Swift 4の場合

coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])

2
メインファイルは、作成した.xcdatamodelです。ユーティリティペインの最初のタブ(右側)を開き、「モデルバージョン」(Xcode 5.1)を見つけて、「現在:」「新しく作成した.xcdatamodel」を選択する必要があります
Stas

1
Computer_whiz123 @、XCodeの5.1.1で、それを「モデルバージョン」と呼ばれる
スタース

1
これはどのようにすればいいですか?
Addison

2
「CoreData:error:-addPersistentStoreWithType:SQLite configuration:(null)URL:file:///...file.sqlite options:{NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1;} ...返されたエラーエラーDomain = NSCocoaErrorDomain Code = 134130「操作を完了できませんでした。(ココアエラー134130) "
CarmenA '19

3
迅速な移行オプション:let options = [ NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption:true ]
HamzaGhazouani 2016

285

アプリをシミュレーターから削除し、プロジェクトをクリーンアップします。それはそれらの問題を解決するはずです。アプリを削除するときにデバッガーで実行していないことを確認してください。そうしないと、アプリが実際に正しく削除されません。

確実に削除したい場合は、このディレクトリUsers/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/で、実行中のバージョンの下にあるアプリのフォルダーを確認してください。

注:これは開発専用です。本番環境では、ある種の移行を実装する必要があります。Googleの「コアデータの移行」。軽量の移行が最も簡単です。


返されたフィリップのthx、私は試したが
うまくいか

アプリのデリゲートでモデルと永続ストアを作成するために使用するコードを投稿できますか?
Philippe Sabourin、2012年

なぜこれが起こるのか、なぜそのような解決策がうまくいくのかは少し理不尽ですが、それはそれでは役に立ちません.. nywaz、ここに私の賛成票を入れます..あなたのガイドラインに感謝するために今私ができる最善のこと...ヘルプメイトのために。
Apple_iOS0304

Xcode 4.6の問題を解決するのに
役立ち

6
これは開発専用です。本番環境では、モデルのバージョン管理と移行を使用します。developer.apple.com/library/ios/#documentation/cocoa/Conceptual/...
フィリップSabourin

35

以下のように、コアデータメソッドのAppDelegate.mファイルにpersistentStoreCoordinatorを作成するときにOptions属性を追加するだけです

OBJECTIVE-C

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil)
    {
        return _persistentStoreCoordinator;
    }

    NSLog(@"persistentStoreCoordinator___");
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyApp.sqlite"];

    NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    NSLog(@"persistentStoreCoordinator___2");
    return _persistentStoreCoordinator;
}

迅速

    lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
    // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
    // Create the coordinator and store
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("SingleViewCoreData.sqlite")
    var failureReason = "There was an error creating or loading the application's saved data."

    // MAIN LINE OF CODE TO ADD
    let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
                    NSInferMappingModelAutomaticallyOption: true]

    do {
        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: mOptions)
    } catch {
        // Report any error we got.
        var dict = [String: AnyObject]()
        dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
        dict[NSLocalizedFailureReasonErrorKey] = failureReason

        dict[NSUnderlyingErrorKey] = error as NSError
        let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
        // Replace this with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
        abort()
    }

    return coordinator
}

それは私の問題を解決しました。


1
この投稿をありがとう、本当に役に立ちました
Subramani

23

回答:シミュレーターからアプリを削除し、クリーンを実行してプロジェクトを再ビルドします。

注:コアデータの定義を変更する場合は、必ず物理デバイスまたはシミュレーターにインストールされているアプリを削除し、プロジェクトをクリーンアップして再ビルドしてください。


シミュレーターでコンテンツと設定をリセットすると、問題が解決しました!ありがとうございます。
セプター2013年

14

はい。物理デバイス上のアプリを削除して再構築すると、機能します。


これは実際に受け入れられた答えではなく私の問題を解決しました。ありがとう!
ケンW

生産で何が起こるかは答えではありません
Eduardo Oliveros

これは恐ろしい回答です。新しいモデルに移行を追加する必要があります。そうしないと、アプリが
本番環境で

14

迅速な場合は、AppDelegate.swiftで次の行を見つけます

try coordinator!.addPersistentStoreWithType(NSXMLStoreType, configuration:  nil, URL: url, options: nil )

そしてそれを

try coordinator!.addPersistentStoreWithType(NSXMLStoreType, configuration: nil, URL: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])

11

私はこのエラーと格闘し、mergedModelFromBundlesがクラッシュし、「*という名前の2つの異なるエンティティを持つモデルをマージできない」エラーが発生するまで数日費やしました。

根本的な問題は、Xcodeがデバイスから古いリソースを削除しないことと、競合を引き起こしていた古いバージョンのデータモデル(.momファイル)があったことです。これが、アプリを削除すると私のデバイスの1つで問題が解決した理由です。

別のSO回答を介してこのブログ投稿を見つけた後、すべての.momファイルを検索する次の行を変更することで、アプリを古いモデルに対してより寛容にしました。

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

これには、Filtersディレクトリのみを検索します。

NSString *path = [[NSBundle mainBundle] pathForResource:@"Filters" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

私はこの質問からrecursivePathsForResourcesOfTypeを使用しました:アプリ内のすべての.momファイルをログに記録することでこれを理解するのに役立ちます:

NSArray *momPaths = [self recursivePathsForResourcesOfType:@"mom" inDirectory:[[NSBundle mainBundle] resourcePath]];
NSLog(@"All .mom files:%@",momPaths);

また、iExplorerを使用して無関係な.momファイルを確認しました(まだ削除していません)。

以下の方法も役に立ちました。[psc managedObjectModel]によって返されたマージモデルにエンティティがあり、モデルやストア自体には存在しなくなったことを示しています。これは、古いモデルがデバイス自体にキャッシュされていて、クリーンな建物では削除されなかったと私に思わせたものです。このメソッドは、モデルに同じ、変更、追加、または削除された各エンティティをログに記録します。(出発点としてこのSOの回答で書かれています):

- (BOOL)comparePersistentStore:(NSPersistentStoreCoordinator *)psc withStoreURL: (NSURL *)storeURL {
    NSError *error = nil;

    // Get the entities & keys from the persistent store coordinator
    NSManagedObjectModel *pscModel = [psc managedObjectModel];
    NSDictionary *pscEntities = [pscModel entitiesByName];
    NSSet *pscKeys = [NSSet setWithArray:[pscEntities allKeys]];
    //NSLog(@"psc model:%@", pscModel);
    //NSLog(@"psc keys:%@", pscKeys);
    NSLog(@"psc contains %d entities", [pscModel.entities count]);

    // Get the entity hashes from the storeURL
    NSDictionary *storeMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType
                                                                                          URL:storeURL
                                                                                        error:&error];
    NSDictionary *storeHashes = [storeMetadata objectForKey:@"NSStoreModelVersionHashes"];
    //NSLog(@"store metadata:%@", sourceMetadata);
    NSLog(@"store URL:%@", storeURL);
    NSLog(@"store NSStoreUUID:%@", [storeMetadata objectForKey:@"NSStoreUUID"]);
    NSLog(@"store NSStoreType:%@", [storeMetadata objectForKey:@"NSStoreType"]);
    NSSet *storeKeys = [NSSet setWithArray:[storeHashes allKeys]];

    // Determine store entities that were added, removed, and in common (to/with psc)
    NSMutableSet *addedEntities = [NSMutableSet setWithSet:pscKeys];
    NSMutableSet *removedEntities = [NSMutableSet setWithSet:storeKeys];
    NSMutableSet *commonEntities = [NSMutableSet setWithSet:pscKeys];
    NSMutableSet *changedEntities = [NSMutableSet new];
    [addedEntities minusSet:storeKeys];
    [removedEntities minusSet:pscKeys];
    [commonEntities minusSet:removedEntities];
    [commonEntities minusSet:addedEntities];

    // Determine entities that have changed (with different hashes)
    [commonEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
        NSData *storeHash = [storeHashes objectForKey:key];
        NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
        if ( ! [pscDescrip.versionHash isEqualToData:storeHash]) {
            if (storeHash != nil && pscDescrip.versionHash != nil) {
                [changedEntities addObject:key];
            }
        }
    }];

    // Remove changed entities from common list
    [commonEntities minusSet:changedEntities];

    if ([commonEntities count] > 0) {
        NSLog(@"Common entities:");
        [commonEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSData *storeHash = [storeHashes objectForKey:key];
            NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
            NSLog(@"\t%@:\t%@", key, pscDescrip.versionHash);
        }];
    }
    if ([changedEntities count] > 0) {
        NSLog(@"Changed entities:");
        [changedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSData *storeHash = [storeHashes objectForKey:key];
            NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
            NSLog(@"\tpsc   %@:\t%@", key, pscDescrip.versionHash);
            NSLog(@"\tstore %@:\t%@", key, storeHash);
    }];
    }
    if ([addedEntities count] > 0) {
        NSLog(@"Added entities to psc model (not in store):");
        [addedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
            NSLog(@"\t%@:\t%@", key, pscDescrip.versionHash);
        }];
    }
    if ([removedEntities count] > 0) {
        NSLog(@"Removed entities from psc model (exist in store):");
        [removedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSData *storeHash = [storeHashes objectForKey:key];
            NSLog(@"\t%@:\t%@", key, storeHash);
        }];
    }

    BOOL pscCompatibile = [pscModel isConfiguration:nil     compatibleWithStoreMetadata:storeMetadata];
    NSLog(@"Migration needed? %@", pscCompatibile?@"no":@"yes");

    return pscCompatibile;
}

使用法:各ストアをNSPersistentStoreCoordinatorに追加する前に呼び出されます:

    [self comparePersistentStore:self.psc withStoreURL:self.iCloudStoreURL];
    _iCloudStore = [self.psc addPersistentStoreWithType:NSSQLiteStoreType
                                          configuration:nil
                                                    URL:self.iCloudStoreURL
                                                options:options
                                                  error:&localError];

10

コア日付の定義を変更するたびに、物理デバイスまたはシミュレーターにインストールされているアプリを削除する必要があります。


20
プロダクションアプリについてはどうですか?Core Dataに変更を加えてApp Storeにアップデートをプッシュすると、すぐにクラッシュしますか?Thx
rwyland


3
はい、CDモデルを変更すると、以前のモデルで生成されたデータを読み込めなくなります。これを処理するには、問題を検出してコアデータの移行を行う必要があります。
Johan


7

Swift 2.1、Xcode 7で私のために働いた最も簡単な解決策は次のとおりです:

  1. シミュレーターからアプリを削除します(Cmd + Shift + Hでホーム画面に移動します。アプリを長押しし、クロスをクリックして、通常の方法でスマートフォンからアプリを削除します)

  2. Cmd + Shift + Hをもう一度押すと、アプリのダンスが停止します

  3. プロジェクトに戻り、再実行します

2つのエンティティが設定されたCore Dataからの書き込み/読み取り中にこの問題が発生しました。アプリを削除してプログラムを再実行すると、問題が修正されました


2
本番
Eduardo Oliveros

6

[Simulator App Folder]/Document/*.sqliteエンティティに変更を加えた後、ファイルを削除したところ、うまくいきました。そしてもちろん、.sqliteファイルには、失われるすべての保存データと構造が含まれています。


2
私も働いた。これで十分であることは理にかなっているようです。ただし、DB内のすべてのデータが
失われ

6

シミュレーターからアプリケーションを削除してコードをクリーンアップし、.its workを実行してください。


6

Swiftを使用している場合。

@Stasの回答に従って、nilの代わりに、App Delegateにオプションを挿入します。

let myOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
            NSInferMappingModelAutomaticallyOption: true]
        if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: myOptions, error: &error) == nil {

1
なぜそれが否決されたかはわかりませんが、私はそれを正しました。Swiftの構文を提供していただきありがとうございます。
Matt Long

いいね!うまくいきました!ありがとうございました!この問題を3時間解決しようとしています。
mr_ivan777 2015

このコードをどこに置くのですか?このコードは、letで私は、コアデータをロードコンテナ= NSPersistentContainer(名称: "modeldb")container.loadPersistentStores(completionHandler:{(storeDescription、エラー)でLET誤差= NSErrorとしてエラー{もし?
MASジョン。

5

シミュレータで「コンテンツと設定をリセット」を試してください。アプリとクリーンビルドを削除した後、私のために働いた


3
ただし、これを行うと、実際のマシンのユーザーでも同じ問題が発生しますか?
Maury Markowitz、2014年

4

アプリで同じ問題が発生しました(まだApp Storeでリリースされていません)。

修正方法は次のとおりです。

  1. クリーン実行(Cmd + Shift + K)
  2. iOSシミュレーターを再起動します。
  3. iOSシミュレーター->コンテンツと設定のリセット(navbarから)

(3)は、最終的に適切に実行するためのステップでした。お役に立てれば!


2

管理対象オブジェクトモデルのスキーマを変更するときに、デバイスからアプリを削除することもできますが、古いスキーマでアプリを既に公開しているなどの理由で、これができない場合があります。

この場合は、古いデータを新しいスキーマに移行する必要があります。

コアデータモデルのバージョン管理とデータ移行



2

Core Dataモデルに変更を加える場合は、既存の永続オブジェクト(ユーザーが現在リリースされているバージョンで作成したもの)を新しいモデルに採用する方法をCore Dataに指示する移行ポリシーを提供する必要があります。

いくつかのシナリオでは、Core Dataは古いモデルから新しいモデルへのマッピングを自動的に推測できます。より複雑な変更については、移行を実行するロジックを実装する必要がある場合があります。

詳細については、コアデータモデルのバージョン管理とデータ移行プログラミングガイドをご覧ください

更新
このStack Overflowの回答は、Core Dataの軽量移行の基本をカバーしており、開始するためのコードも含まれています。


ここではデータ移行のために同じのための私の答えは次のとおりです。stackoverflow.com/questions/8881453/...
Dhaval H.ネーナ

1

この問題は通常、DBが作成されたバージョン間の非互換性が原因で発生します。この問題に対する一般的なアプローチは、アプリ削除して再インストールすることです。しかし、あなたの言及したケースでは、DBのバージョンはXcode 3.2と4.2では完全に異なります。したがって、同じバージョンのXcode for DBを使用することをお勧めします。


1

まず、xcdatamodeldバンドルに含める必要があるのはxcdatamodelファイルだけです。サブクラスをに含めないでくださいxcdatamodeld。それらをそこから移動します。彼らがコンパイラを混乱させているかなりの可能性があります。

次に、エラーはCore Dataがモデルを見つけられないことを示しています。データを作成してからモデルに触れましたか?もしそうなら、あなたは不整合な状態にあり、データを削除することによってそれを修正する必要があります(フィリップが提案しました)か、モデルの変更をロールバックすることによってBACK


xcdatamodelバンドルからモデルを取り出す方法はありますか?またはshd私はそれを削除しますか?
12

xcdatamodelファイルであるモデルがそこにあるはずです。移動する必要があるのは.hおよび.mファイルです。Finderを使用します。
Marcus S. Zarra、2012年

0

エラーが発生しましたが、次の理由でエラーが発生しました。

私は最初、「エントリ」という名前のエンティティを1つ持っていて、そのエンティティ用に1つの行がデータベースに保存されていました。次に、「Person」という名前の別のエンティティを追加しました。追加した後、それがビルドされてエラーが発生しました。そこで、「Person」エンティティを削除してからアプリをビルドし、「Entry」にあった行を削除してからアプリケーションを閉じることで、問題を解決しました。その後、スマートフォンからアプリを完全に削除してから再構築しましたが、問題なく動作しました。どのステップが問題(行またはアプリの削除)を修正したかはわかりませんが、解決策を探している場合は、これが役立つことを願っています。:)

編集:ああ、新しいエンティティ(私の場合は「人」)を削除してアプリを再度作成することを心配している場合は、後でCMD + Zを使用して元に戻すことができます。


0

私はこの問題を抱えていました-最初にシミュレータをリセットしてから、プロジェクトをクリーンアップして再ビルドしました。そして、それは機能します。


0

コアデータを変更する場合(テーブルへのフィールドの追加、フィールドの削除など)、アプリケーションドキュメントフォルダー内のsqliteファイルは、スキーマと同期している必要があります。

このファイルはデフォルトでは上書きされません。このファイルは再生成する必要があります。

次の手順を実行します:

  1. NSURLが指すフォルダーに移動します。(このパスは、クラッシュする前にアプリケーションによって生成される例外メッセージにあります。)例:/ Users // Library / Application Support / iPhone Simulator // Applications // Documents

  2. sqliteファイルを削除または名前変更する

  3. アプリケーションをクリーンして再実行する
  4. アプリケーションを再実行すると、新しいsqliteファイルが生成されます。

これにより、スキーマとXcodeが確実に同期されます。


-1

Macアプリ開発の場合:

  1. プロジェクトをきれいにする
  2. 派生データを消去
  3. / Users / YOUR_NAME / Library / Containers / YOUR_APP_BUNDLE_ID / Data / Documents /に移動し、内部のすべてのファイル(「.sqlite」、「。sqlite-shm」など...)を削除します

それは私にとってはうまくいきました、これが役に立てば幸いです。


-2

iOSシミュレータ->内容と設定をリセット...

私のために働いた

iOSシミュレーター->内容と設定をリセット...->リセットはiOS9(xcode 7.1)でも動作します


4
本番
Eduardo Oliveros
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.