1

保存managedObjectContext似乎吃NSUserDefaultmanagedObjectContext似乎刪除我NSUserDefault

NSString *defaultSiteUrl = [[NSUserDefaults standardUserDefaults] objectForKey:kSelectedSiteUrlKey]; 
NSLog(@"the default site url is: %@", defaultSiteUrl); 

if (![[managedObjectContext] save:&error]) { 
    NSLog(@"Error saving entity: %@", [error localizedDescription]); 
} 

NSString *defaultSiteUrl2 = [[NSUserDefaults standardUserDefaults] objectForKey:kSelectedSiteUrlKey]; 
NSLog(@" the default site url is: %@", defaultSiteUrl2); 

導致控制檯:

2011-05-10 15:26:40.710 Moodle[44566:207] the default site url is: http://jerome.moodle.local/~jerome/Moodle_iPhone 
2011-05-10 15:26:40.717 Moodle[44566:207] the default site url is: (null) 

什麼會導致這個問題? 以何種方式將NSUserDefaults與ManagedObjectContext相關?

注:

  • 爲了讓你知道我的申請:我是一個深化發展的Moodle的應用程序。這段代碼在顯示課程列表的屏幕上。當我在「站點設置」屏幕上設置userdefault時,我使用[[NSUserDefaults standardUserDefaults]同步]。所以我猜這是很好的保存

  • 如果在設置用戶默認設置後直接進入課程列表屏幕之前重新啓動模擬器,那麼代碼工作(用戶默認不會被「save manageObjectContext」刪除)。

+0

你用什麼代碼來設置用戶默認的密鑰?你確定你沒有線程調用覆蓋設置並同步後臺的默認值嗎? – marzapower 2011-05-10 09:42:00

+0

'[[NSUserDefaults standardUserDefaults] setObject:[settingsSiteViewController.site valueForKey:@「url」] forKey:kSelectedSiteUrlKey]; [[NSUserDefaults standardUserDefaults] synchronize];'這非常簡單。只有兩個地方改變這個用戶的默認值。我一直會去看看,但我還沒有明白。 – 2011-05-23 08:12:48

回答

2

必須初始化由[NSUserDefaults的registerDefaults:的appdefaults]的數值NSUserDefaults的使用同步進行instiliaztioan方法可能會破壞你的用戶默認設置,注意,它無關,與核心數據

+0

感謝Dongsheng,registerDefaults似乎確實解決了這個問題。我仍然想知道「save manageObjectContext」後面發生了什麼:) – 2011-05-30 09:46:13