2011-08-03 5 views
4

この質問はここに掲載されていますが、常に答えはモデルが変更されたこと、店舗。ココアエラー134100再度 - (開かれたモデルは作成に使用されたモデルと互換性がありません)

このエラーも発生していますが、これは新しいアプリケーションです。エンティティや属性を追加/変更していません。

私は店を削除しましたが、私はシミュレータをリセットしましたが、私は同じ結果を得ます。

ここに店舗コードがあります。この問題の原因は他にありますか?ここ

- (NSManagedObjectModel *)managedObjectModel { 
    // NSLog(@"%s", __FUNCTION__); 
    if (managedObjectModel_ != nil) { 
     return managedObjectModel_; 
    } 

    NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"Lexicon" ofType:@"momd"]; 
    NSURL *modelURL = [NSURL fileURLWithPath:modelPath]; 
    managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];  
    return managedObjectModel_; 
} 

/** 
Returns the persistent store coordinator for the application. 
If the coordinator doesn't already exist, it is created and the application's store added to it. 
*/ 
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 

    if (persistentStoreCoordinator_ != nil) { 
     return persistentStoreCoordinator_; 
    } 

    NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"dict.sqlite"]]; 

    NSError *error = nil; 
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { 

     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    }  

    return persistentStoreCoordinator_; 
} 

コンソールが吐き出すある:

2011-08-03 11:42:38.936辞書[4468:F203] - [AppDelegate アプリケーション:didFinishLaunchingWithOptions:] 2011-08-03 11 :42:38.989 レキシコン[4468:f203] - [AppDelegate applicationDocumentsDirectory] ​​ 2011-08-03 11:42:39.048レキシコン[4468:f203]未解決のエラーエラー ドメイン= NSCocoaErrorDomainコード= 134100 "操作できませんでした が完了しました(ココアエラー134100)。 "UserInfo = 0x6d3ee60 {metadata = {type = 0、{length = 0、capacity = 0、bytes = 0x} {0 = {0} {length = 0、capacity = 0、bytes = 0x} {NS} }} 4: {type = immutable dict、count = 1、 entries => 0 :{内容= "LexiconEntity"} = {長さ= 32、 容量= 32バイト= 0x8698c5295fa5124b78a6b127bba26ff0 ... 70eaece0517cd4c6}}

7:{内容= "NSStoreUUID"} = { 内容="コンテンツ" "NSStoreType"} = {コンテンツ= "SQLite"} 9:{コンテンツ= "_NSAutoVacuumLevel"} = {コンテンツ= "2"} 10:内容= "NSStoreModelVersionHashesVersion"} = { 値= +3、タイプ= kCFNumberSInt32Type}}、理由=ストアを開くために使用されるモデルは}ストアを作成するために使用されるものと 互換性がない、{ メタデータ= { NSPersistenceFrameworkVersion = 363; NSStoreModelVersionHashes = { LexiconEntity = < 8698c529 5fa5124b 78a6b127 bba26ff0 f3bc678b a4f1e809 70eaece0 517cd4c6>。 }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers =( <> ); NSStoreType = SQLite; NSStoreUUID = "86B22D58-28A5-4585-8650-07111B34B43A"; "_NSAutoVacuumLevel" = 2; }; 理由= "ストアを開くために使用されたモデルが、ストアの作成に使用されたモデル と互換性がありません"; }

答えて

2

sqlite DBストアが正しく構築されていないことが判明しました。したがって、この場合、メッセージはかなり正確でした。

上記の問題は本物でした。データベースはモデルを反映していませんでした。

解決策は、Core Dataにモデルから空のデータベースを作成させ、Core Dataにデータ自体をインポートさせることです。

初めてsqliteデータベースをsqlにエクスポートしてdb.sql(imaginative!)ファイルを呼び出しました。メタデータテーブルではなく、データテーブルと主キーテーブルのみをエクスポートしました。私はこのためにSQLiteManagerというアプリを使いました。コマンドラインでも行うことができます。

すべてのコードは次のように

このコードは..です永続ストアコントローラを扱う以外の株式のものである:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 

    if (persistentStoreCoordinator_ != nil) { 
     return persistentStoreCoordinator_; 
    } 


    NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"db.sql"]; 

    // set up the backing store 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    // If the expected store doesn't exist, copy the default store. 
    if (![fileManager fileExistsAtPath:storePath]) { 
     NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"dict" ofType:@"sqlite"]; 
     if (defaultStorePath) { 
      [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; 
     } 
    } 

    NSURL *storeURL = [NSURL fileURLWithPath:storePath]; 

    NSError *error = nil; 
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { 

     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    }  

    return persistentStoreCoordinator_; 
} 

私は私のために動作するようです。これが役に立てば幸い..

関連する問題