2017-02-07 9 views
1

私は約1年半前に私が戻ってくるアプリを作った。私がSwiftの歯を切ったのはプロジェクトでした。それ以来、言語とSwift能力の両方で多くのことが明らかに変わりました。ユーザーをアップグレードするためのCoreDataクラッシュを防止する

昨日初めて、単一のCoreDataモデルを更新して、オプションの文字列属性を追加しました。私はファイル生成ビットを行い、新しいデータモデルが適切に選択されたインスペクタの列を確認しました。

私のシミュレータとテストデバイスでは、新しいバージョンをインストールするために古いバージョンのアプリケーションを削除する必要があります。クラッシュすることがあります。私は、それが開発環境プロセスの一部だと考えています。 App Storeからの簡単なアップデートを行うときに、アップグレードしたユーザーを削除して再インストールする必要がないようにするにはどうすればよいですか?私は、Xcode/CoreData/Appleがこれを内部のスクリプトやユーザーが見えないプロセスで処理していると仮定しています。しかし、ここでは、ユーザーのためにv1からv1.1へのスムーズな移行を確実にするために必要なことが何かあるかどうかを理解するために、この記事を投稿したかったのです。

私が言いましたように、私がしたのはオプションの文字列でした。新しいフィールドがnilである既存のすべてのユーザーデータが新しいスキーマに移行されると仮定します。

ここでのご意見は大歓迎です。ありがとう!

+0

古いバージョンから新しいバージョンへの移行方法をいくつか選択できますが、ここで少し読んでみることをお勧めします:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweightMigration.html –

+0

ありがとうございました –

+1

そのクラッシュは開発プロセスの一部ではありません。リリース前に修正する必要があります。 –

答えて

2

アップグレード時にアプリケーションがシミュレータでクラッシュすると、ユーザーにもクラッシュが発生します。これを避けるために

、あなたは以下の手順に従っていることを確認する必要があり:

  1. は、あなたがどのような方法でデータモデルの元のバージョンを変更しないことを確認してください。
  2. Xcodeでxcdatamodelファイルを選択し、メニューから[エディタ]> [モデルバージョンの追加...]を選択します。
  3. Xcodeは、現在のモデルに基づいて新しいバージョン名を提案します。新しいバージョン名を書き留めてから、Finishをクリックします。
  4. もう一度xcdatamodelファイルを選択し、ファイルインスペクターに移動してモデルバージョンで新しいバージョン名を選択し、現在のバージョンにします。
  5. Project Navigatorで、xcdatamodelの新しいバージョンを選択します。あなたの属性を追加してください。

この手順をこの順に実行することが重要です。新しいモデルを作成する前に属性を追加したり、現在のバージョンを作成したりすると、クラッシュする可能性があります。

EDIT:これは、軽量移行を有効にする場合にのみ有効です。

let options = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true] 

do { 
    //coordinator is an NSPersistentStoreCoordinator 
    try coordinator!.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: options 
} catch var error as NSError { 

    // handle error however you want here...    
    abort() 
} 
+0

ありがとうございます。また、NSManagedObjectのサブクラスを生成する必要がありますか?それはここから外れていますか? –

+0

これは完全に機能しました。この後で見つけるユーザーの編集を追加する –

+0

あなたの助けをもう一度おねがいしますMike! –

関連する問題