0

コアデータを使用してアプリケーションを構築しました。これは、2つの属性を持つエンティティで非常にうまく機能します。単一の属性を持つ新しいエンティティを追加したい場合、アプリケーションは起動時にクラッシュします。

2012-07-16 23:11:13.579 myApp[6773:fb03] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x6bb36e0 {metadata=<CFBasicHash 0x6bbae90 [0x1748b48]>{type = immutable dict, count = 7,
entries =>
    2 : <CFString 0x6bbab30 [0x1748b48]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x6bbaf20 [0x1748b48]>{type = immutable, count = 1, values = (
    0 : <CFString 0x1743cd8 [0x1748b48]>{contents = ""}
)}
    4 : <CFString 0x6bbab60 [0x1748b48]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x6bbaa30 [0x1748b48]>{value = +386, type = kCFNumberSInt64Type}
    6 : <CFString 0x6bbaec0 [0x1748b48]>{contents = "NSStoreModelVersionHashes"} = <CFBasicHash 0x6bbafb0 [0x1748b48]>{type = immutable dict, count = 1,
entries =>
    2 : <CFString 0x6bbaf40 [0x1748b48]>{contents = "AllFamille"} = <CFData 0x6bbaf60 [0x1748b48]>{length = 32, capacity = 32, bytes = 0x5a5b78eb9edf4005bbe8a8d5e85fd102 ... 208bdf48b8b44695}
}

    7 : <CFString 0x1101ad8 [0x1748b48]>{contents = "NSStoreUUID"} = <CFString 0x6bbad30 [0x1748b48]>{contents = "45640157-116E-4616-93C5-2DA6027F4E9C"}
    8 : <CFString 0x1101978 [0x1748b48]>{contents = "NSStoreType"} = <CFString 0x1101988 [0x1748b48]>{contents = "SQLite"}
    9 : <CFString 0x6bba9e0 [0x1748b48]>{contents = "_NSAutoVacuumLevel"} = <CFString 0x6bbb000 [0x1748b48]>{contents = "2"}
    10 : <CFString 0x6bbaef0 [0x1748b48]>{contents = "NSStoreModelVersionHashesVersion"} = <CFNumber 0x6d84b60 [0x1748b48]>{value = +3, type = kCFNumberSInt32Type}
}
, reason=The model used to open the store is incompatible with the one used to create the store}, {
    metadata =     {
        NSPersistenceFrameworkVersion = 386;
        NSStoreModelVersionHashes =         {
            AllFamille = <5a5b78eb 9edf4005 bbe8a8d5 e85fd102 3c6d4040 f1b7fc6c 208bdf48 b8b44695>;
        };
        NSStoreModelVersionHashesVersion = 3;
        NSStoreModelVersionIdentifiers =         (
            ""
        );
        NSStoreType = SQLite;
        NSStoreUUID = "45640157-116E-4616-93C5-2DA6027F4E9C";
        "_NSAutoVacuumLevel" = 2;
    };
    reason = "The model used to open the store is incompatible with the one used to create the store";
}
4

2 に答える 2

5

その属性を追加したからかもしれません。したがって、新しいデータベースは古いデータベースと一貫性がありません。シミュレーターのフォルダーの下にあるデータベースを削除して、もう一度実行してみてください。

于 2012-07-16T21:19:37.480 に答える
2

この問題は、データベースの保存に使用された管理オブジェクト モデルが異なるために発生しています。新しいエンティティを追加したため、変更された管理オブジェクト モデルを使用して、以前のモデルで保存されたデータを読み込むことができません。

データベースの最初のバージョンで作業している場合は、シミュレーター/デバイスからアプリを削除できます。しかし、既に公開されているアプリを変更する場合、新しいバージョンをインストールする前にアプリをアンインストールするようユーザーに求めることができないため、これは大きな問題になる可能性があります。

この場合、マネージド オブジェクト モデルの新しいバージョンを作成し、Core Data を構成して、以前のモデル バージョンから最新のモデル バージョンへのデータベースの軽量移行を実行する必要があります。

ドキュメントに記載されている手順に従ってください。

于 2012-07-19T21:41:32.343 に答える