2016-09-22 11 views
0

標準のコアデータスタックを使用するSwift 3 IOS 10アプリがあります。一部のユーザーは、最新バージョンのアプリにアップグレードする際にデータが失われたと報告しています。起こっているように見えるのは、モデルが変更されていなくても新しいデータストアが作成され、移行がないということです。コアデータ - アプリのバージョンに応じて異なるデータ

公開されたバージョン - データセット1が表示されたら、これを再作成できます。しかし私のデバイスに私の開発版をプッシュすると、データセット1はなくなりました。私はデータセット2にレコードを追加することができ、それはうまく維持されます。しかし、私がアプリストアに戻って公開版を入手すると、データセット1が再び表示されます。

誰かがこれがなぜ起こっているのかを説明し、それを防ぐことができますか?私は何か簡単なものを逃しています事前に感謝...

+0

理由Xのバージョン間でストアURLが変更されていますか。バージョンを変更してv1ストアとv2ストアを切り替えることができます。 –

+0

アプリの各バージョンは別のディレクトリに独自のストアを持つことができますか?私はsqlLiteストアのバージョンが1つしかないと思っていました。 –

+0

URLを使って 'addPersistentStoreWithType'を呼び出したところです。あなたはそれらがバージョン間で同一であることは確かですか?それが問題です :-)。ここに2つの物理的な店があるようです。 –

答えて

0

私はsimular問題を抱えていました。私がAppDelegateでこのセクションを変更したとき、それは私のために修正されました。

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." 
    do { 
     try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, 
      NSInferMappingModelAutomaticallyOption: true]) //THIS LINE 
    } 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 
}() 
+0

ありがとう、私はすでにそれを試みた。 –

+0

App StoreのバージョンはSwift3ですか? Swift 3に変換する前にAppDelegateを比較して比較できるように、ソースコントロールを使用していますか? – MwcsMac

0

みんなの回答をお寄せいただきありがとうございます。私はソースコントロールを使用し、何も変更されていないことを確認しました。問題は、既存のデータストアがあるかどうかを確認していないようです。 Appleのドキュメントでは、アプリケーションを新しいバージョンにアップグレードすると、ドキュメントディレクトリの内容が以前のバージョンのディレクトリからコピーされて削除されます。これは一貫して起こっていないようです。アプリケーションが開いたときに既存のデータストアをチェックするためのコードを追加し、見つかった場合は作業ディレクトリにコピーして、この問題を解決したようです。

関連する問題