我追踪了引发异常的代码:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
在您的方法- (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.
使用断点很容易解决,我敦促您学习如何使用断点,因为它们对于此类可重现的错误非常有用。
至于你的第二个问题,有上百万种方法可以剥这只猫的皮。创建一堆场景并在它们之间进行push segues并给它们一个共享的“问题类”并没有错。它看起来很漂亮,并且不会涉及太多代码。性能不会是问题。
也就是说,如果您想以编程方式执行此操作,请使用 NSDictionaries 的 NSArray,每个 dict 包含一个问题和可能的答案,并对控制器进行编程以在向后或向前点击时从数组中加载它们,记住保存。如果问题是静态的,我真的强烈建议您使用故事板方法。远不那么繁琐。
Breakpoints 和 segues 都很好,但是现在我敦促你冲杯咖啡,买些饼干,并阅读Core Data Programming Guide的封面。您会发现 Apple 的文档非常易于访问。
如果您对此真的很陌生,请遵循此建议。它对我有用。