2017-08-17 4 views
4

私AppDelegateには、以下のすべてのおなじみのコアデータテンプレートに付属している:アプリケーションのNSPersistentContainer.loadPersistentStoresのエラーを処理する方法は?

永続コンテナ:

lazy var persistentContainer: NSPersistentContainer = { 
    let container = NSPersistentContainer(name: "newsapp") 
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in 
     if let error = error as NSError? { 
      fatalError("Unresolved error \(error), \(error.userInfo)") 
     } 
    }) 
    return container 
}() 

は、それはまた次のようにコメントしていました。この実装 は、 アプリケーションのストアをロードしたコンテナを作成して返します。このプロパティは、ストアの作成に失敗する可能性がある正当な エラー条件が存在するため、オプションです。

エラーを適切に処理するために、この実装をコードに置き換えてください。 fatalError()は、アプリケーションにクラッシュログを生成させて終了させます。この機能は出荷時のアプリケーションでは使用しないでください。開発中はこの機能が役立つかもしれません。ここでエラーのため

典型的な理由は、次のとおりです。

  • を親ディレクトリは、存在しません作成することができない、または書き込みを禁止します。
  • デバイスがロックされているときのパーミッションまたはデータ保護のため、永続ストアにアクセスできません。
  • デバイスの空き容量がありません。
  • ストアを現在のモデルバージョンに移行できませんでした。

実際の問題の内容を確認するには、エラーメッセージを確認してください。

確かに、それはこの場所で終了呼び出すと、それが生産のアプリに許可されていないだけではなく、悪い考えですが、データ・ストアが何らかの理由で壊れてしまった場合ので、as I read elsewhereは、ユーザーが再インストールする必要がありますアプリはそれを知らない。この場合、ユーザーは私のアプリを削除して忘れてしまいます。

ここで、このようなエラーや他のエラーをどのように処理することになっていますか?エラー処理コードを記述しても、これらのエラーがほとんど起こらない場合、どのように正しく動作するかテストしますか?

私はすべてを見渡しましたが、例は見つかりませんでした。

+0

私はそれに警告メッセージを作成する必要があると思います。 – Mannopson

答えて

2

ほとんどの場合、このエラーに対して意味を持つのはfatalErrorだけですが、ユーザーに何が起きているかを知らせるアラートを表示したい場合があります。あなたが永続的なストアを必要としているが、ロードできない場合、あなたは一種のものです。

これらのエラーの中には、開発中に発生するものがあります。ストアの移行やデータ保護の問題のように、テストする必要があり、必要に応じてリリース前にアプリを修正する必要があります。そのような場合はfatalErrorが実際には意味をなさないのは、あなただけがこれを体験するからです。

上記の例のうち、予期せずに発生する可能性のある唯一のものは、デバイスの空き容量です。 を確認して、使用可能なスペースを確認してください。しかし、あなたのアプリケーションがクリアすることができるたくさんのスペースをアプリが使用していない限り、エラーから回復する方法はまだありません。これが起こった場合、iOSは既にスペースが足りなくなっていることを警告しているので、自分で行う必要はありません。

多くのデータがない場合は、クリアすることができます。fatalErrorはここでも意味があります。

+0

デバイスのスペースが足りない場合の私の問題。私はこのケースで 'fatalError'を使い続けるべきですか? – Mannopson

+1

おそらく。どのようなエラー処理状況でも、あなたはあなたのアプリが回復するために何をすることができます質問に答える必要がありますか?デバイスがいっぱいになってもアプリが役立つことはありますか?もしそうなら、それを試みてください。もしそうでなければ、他に応答する方法はありません。 –

+0

コメントありがとうございます!だから私はまだ回復オプションはありません。このエラーは、初めて初めてスローされますか? (アプリが初めて起動されたとき)。 'persistentContainer'の状態を確認できる方が良いでしょう。作成が成功した場合、ユーザーは 'persistentStore'にデータを追加できなければなりません。この状態を確認することは可能ですか?もう一度おねがいします – Mannopson

関連する問題