我有一個簡單的iPhone應用程序,它在啓動時訪問一些遠程數據,然後要求用戶選擇其中一個選項,但每次都會發生這種情況應用程序啓動,並且我希望應用程序在下次回憶該選擇時,如何使用Core Data持久保留此對象?什麼是在用戶的核心數據中存儲單個對象的最佳方式
我非常新的核心數據,我想它與增加一個對象到NSManagedObjectContext
,但我不知道是否有一種方法來存儲一個對象對一個鍵或一些東西,以便我可以檢查是否它的然後很快被選定爲避免做遠程調用...
編輯
好吧,好像NSUserDefaults
是去這裏的路,但我有一個小問題,我的自定義類是擴展NSManagedObject
這我聽說在NSUserDefaults中存儲一個實例有點困難,所以我寫了一個小轉換器來獲取cl的每個屬性屁股,並把它放在NSUserDefaults不同的鍵下。
像這樣:
-(void)saveDeviceForUser:(Device*) device
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedActive = [NSKeyedArchiver archivedDataWithRootObject:device.active];
[defaults setObject:encodedActive forKey:@"UsersDevice_Active"];
//and so on for each property of the Device object
}
然後我找回我以類似的方式對象:
-(Device*)loadDeviceForUser
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedActive = [defaults objectForKey: @"UsersDevice_Active"];
NSNumber* unarchivedActive = (NSNumber*)[NSKeyedUnarchiver unarchiveObjectWithData: encodedActive];
Device *d = [[Device alloc] init];
d.active = unarchivedActive;
return d;
}
但是,當我到上面的d.active = unarchivedActive
行我得到一個錯誤:
由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:' - [Device setActive:]:無法識別的選擇器已發送到實例0xac0be1 0'
我的類屬性是使用@dynamic而不是@synthesize設置的,所以我必須實現setter和getters才能使它工作嗎?會以任何方式擾亂核心數據嗎?
我希望是有道理的
乾杯, 馬克
你的NSNumber對象* unarchivedActive,它可能需要是NSNumber * unarchivedActive – Kurbz 2010-07-15 13:18:32
賓果!事實證明這裏有很多問題,並且已經遲到了......愚蠢的複製和粘貼錯誤!感謝幫助所有排序現在:) – Mark 2010-07-15 23:01:48