当我的应用程序转到后台时,我称之为:
- (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
中保存到核心数据,但我该如何解决?
答案 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中的本地属性。