當我的應用程序轉到後臺,我調用這個方法:如果在我的應用程序退出後,我將某些內容保存到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
,而我保存到Core Data的ReadingViewController
,但我該如何解決該問題?
那麼我如何使用AppDelegate而不是在ReadingViewController中使用該方法呢?我試圖讓所有的東西都在AppDelegate之外運行。 –
我得到的是'controller.managedObjectContext = self.managedObjectContext'這行''看起來沒有必要 - 如果你的'ReadingViewController'沒有'managedObjectContext'屬性,那麼刪除該行。 –
並且您的保存方法**已經**正在通過應用程序委託訪問上下文。看起來你正在混合兩種訪問上下文的風格。你可以在你的應用程序委託中設置它,並將它傳遞給你的視圖控制器(風格明智,我認爲這是更好的/更乾淨的方法),或者,你可以直接通過請求應用程序委託來訪問它它(這是你的保存方法已經在做什麼)。你正在努力做到這一點,做一個或另一個 - 任何一種方法都可以工作,兩者一起就是令你困惑的事情。 –