2016-03-21 12 views
0

私はx.x.xcdatamodelを使用しているアプリケーションで作業しています。今では同じx.x.xdataモデルで、エンティティの1つに属性を追加しました。アプリケーションがクラッシュし、「このNSPersistentStoreCoordinatorには永続ストアがありません(スキーマの不一致または移行の失敗)、保存操作を実行できません。私は多くのことを試してみましたが、私はまた、状況に対処するために軽量の移行を使用していますが、well.Belowが私のコードであるとしてそれが動作しない:このNSPersistentStoreCoordinatorには、永続ストア(スキーマの不一致または移行の失敗)がありません。保存操作を実行できません

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

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"myApp.sqlite"]; 

    NSError *error = nil; 
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

    NSDictionary *options = @{ 
           NSMigratePersistentStoresAutomaticallyOption : @YES, 
           NSInferMappingModelAutomaticallyOption : @YES, 
           NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"} 
           }; 

    if(![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) 
    { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    } 

    return __persistentStoreCoordinator; 
} 




- (BOOL) saveContext 
{ 
    @synchronized (_localStorage) { 
     //NSLog(@"----------------------------Save context called---------------------------"); 
     BOOL result = TRUE; 
     NSError *error = nil; 
     NSManagedObjectContext *managedObjectContext = self.managedObjectContext; 

     if (managedObjectContext != nil) 
     { 
      //Crashes here at this line. 
      if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) 
      { 
       NSLog(@"----------------------------Save context failed---------------------------"); 
       result = FALSE; 
       NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
      } 
     } 

     //NSLog(@"----------------------------Save context completed---------------------------"); 

     return result; 
    } 
} 

私はこっちに何かが足りないのですか?または、エンティティに単一の属性を追加しても完全な移行を実行する必要がありますか?事前に感謝します。

答えて

5

ここで自分で移行する必要はありません。 doは、データモデルの新しいバージョンを追加する必要があります。 xcdatamodelを編集することはできず、コアデータが新しいバージョンを使用するだけであることを期待することはできません。あなたの既存のモデルを維持し、新しいバージョンを作成し、新しいバージョンのを変更する必要があります。永続ストアファイルと一致するモデルのバージョンを常に持っている必要があります。

あなたは、Xcodeののファイルブラウザでxcdatamodelモデルファイルを選択し、「編集」メニューに行く、と選択して、新しいバージョンを作成「モデルバージョンを追加...」

+0

をだから私は、新しい属性を追加したいとき新しいデータモデルを作成する必要がありますか? 1つの小さな変化だけでも –

+0

はい、データモデルを変更するたびに発生します。通常、データモデルは慎重に計画されていれば頻繁に変更されることはありません。 –

+0

ご協力いただきありがとうございます。うまくいけば新しいバージョンを追加することでこの問題は解決しますが、問題は私が私の最終段階でそれを再現することはできませんが、アプリはユーザーのためにクラッシュするので、 。 –

関連する問題