如果在我的应用程序退出后我将内容保存到Core Data,则每次都会在下一次启动时崩溃。为什么?

时间:2013-07-29 16:38:35

标签: ios objective-c core-data

当我的应用程序转到后台时,我称之为:

- (void)saveArticlePosition {
    self.article.position = self.position;

    NSManagedObjectContext *managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
    NSError *error;

    [managedObjectContext save:&error];
}

来自applicationDidEnterBackground的通知。但是,在下一个应用程序启动时,我收到此错误:

[ReadingViewController setManagedObjectContext:]: unrecognized selector sent to instance 0x844fe40

AppDelegate.m中的这一行:

controller.managedObjectContext = self.managedObjectContext;

这是更大部分的一部分:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    RootViewController *controller = (RootViewController *)navigationController.topViewController;
    controller.managedObjectContext = self.managedObjectContext;
    ...

到底出了什么问题?我只能想到controller对象的类型为RootViewController,而我在ReadingViewController中保存到核心数据,但我该如何解决?

2 个答案:

答案 0 :(得分:0)

您在ReadingViewController上有一个名为managedObjectContext的实例变量吗?

我问,在你的save方法中,你不使用实例变量来获取上下文,而是通过app delegate查找上下文。

这就是错误信息:

[ReadingViewController setManagedObjectContext:]: unrecognized selector sent to instance

装置。您试图在ReadingViewController的实例上调用方法,而ReadingViewController没有具有该名称的方法。 (你可能希望在ReadingViewController中实现一个方法setManagedObjectContext:或者在其中定义一个名为managedObjectContext的属性)。

如果您将上下文存储在app delegate中,那么您无需将其保存到ReadingViewController中,尤其是在您需要时,您可以通过app delegate查找它。

答案 1 :(得分:0)

根据错误消息,您从navigationController.topViewController获取的对象实际上是一个ReadingViewController,即使您将其转换为RootViewController。 ReadingViewController似乎没有managedObjectContext属性。

我也不确定你为什么要设置该属性,因为代码表明你直接从AppDelegate获取了managedObjectContext而不是saveArticlePosition中的本地属性。