0

当我的应用程序进入后台时,我调用此方法:

- (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;
    ...

到底出了什么问题?我能想到的是,当我保存到 Core Data 时,该controller对象是类型的,但我将如何解决这个问题?RootViewControllerReadingViewController

4

2 回答 2

0

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

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

于 2013-07-29T17:00:41.303 回答
0

您的 ReadingViewController 上是否有一个名为 managedObjectContext 的实例变量?

我问,就像在您的保存方法中一样,您不使用实例变量来获取上下文,而是通过应用程序委托查找上下文。

这就是错误信息:

[ReadingViewController setManagedObjectContext:]: unrecognized selector sent to instance

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

如果您将上下文存储在您的应用程序委托中,那么您不需要将其保存到您的 ReadingViewController 中,尤其是当您需要它时,您可以通过应用程序委托查找它。

于 2013-07-29T16:54:58.530 回答