例外をスローしていたコードを追跡しました。
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
method- (NSFetchedResultsController *)fetchedResultsController
で、同じ名前のプロパティのカスタム セッター。存在しない場合は初期化します。本当の問題は、それself.managedObjectContext
が現在ゼロであることです。コード内のどこにも、managedObjectContext が割り当てられたマスター ビュー コントローラーはありません。
これを行う最も簡単な方法は、この方法で AppDelegate から取得することです。
#import "safetyCultureAppDelegate.h" //this needs to be at the top to make sure the compiler knows what you’re on about.
...
self.managedObjectContext = [(safetyCultureAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; //put this in the viewDidLoad, or wherever you can set it when the Master VC is created.
これは、ブレークポイントを使用して解決するのは非常に簡単でした。ブレークポイントは、このような再現可能なバグで非常に役立つため、使用方法を学ぶことを強くお勧めします。
2 番目の質問ですが、この猫の皮を剥ぐ方法は無数にあります。たくさんのシーンを作成し、それらの間でセグエをプッシュし、それらに共有の「質問クラス」を与えることに何の問題もありません。かなり見栄えがよく、コードはあまり必要ありません。パフォーマンスは問題になりません。
つまり、プログラムで実行したい場合は、NSDictionaries の NSArray を使用し、各 dict に質問と可能な回答を保持し、前後にヒットするときに配列からそれらをロードするようにコントローラーをプログラムし、保存することを忘れないでください。ただし、質問が静的な場合は、ストーリーボード アプローチを使用することを強くお勧めします。はるかに手間がかかりません。
ブレークポイントとセグエはすべて問題ありませんが、今はコーヒーを淹れてビスケットを買って、コア データ プログラミング ガイドを最初から最後まで読むことをお勧めします。Apple のドキュメントは非常にアクセスしやすいことがわかります。
これに本当に慣れていない場合は、このアドバイスに従ってください。それは私のために働いた。