2013-04-07 37 views
18

您好,我正在嘗試從一家餐館創建一個Fourates列表對象,我的應用程序擁有不同餐館的列表,我希望用戶添加優惠餐廳的功能,並且此代碼是不工作嘗試插入非財產價值Objective C

- (IBAction)toggleFav:(id)sender { 

    Restaurant *resto = [self restaure]; 

    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 
    [dic setObject:resto.price forKey:@"restoPrice"]; 
    [dic setObject:resto.restaurantId forKey:@"restaurantId"]; 
    [dic setObject:resto.restoAbout forKey:@"restoAbout"]; 
    [dic setObject:resto.restoAddress forKey:@"restoAddress"]; 
    [dic setObject:resto.restoBeverages forKey:@"restoBeverages"]; 
    [dic setObject:resto.restoCategory forKey:@"restoCategory"]; 
    [dic setObject:resto.restoEmail forKey:@"restoEmail"]; 
    [dic setObject:resto.restoLogo forKey:@"restoLogo"]; 
    [dic setObject:resto.restoName forKey:@"restoName"]; 
    [dic setObject:resto.restoPhone forKey:@"restoPhone"]; 
    [dic setObject:resto.restoCity forKey:@"restoCity"]; 

    NSArray *dicArray = [dic allKeys]; 


    if([sender isSelected]){ 
     //... 
     [sender setSelected:NO]; 
     NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"restoName"] mutableCopy]; 
     [array removeObject:dicArray]; 
     [[NSUserDefaults standardUserDefaults] setObject:array forKey:@"restoName"]; 

    } else { 
     //... 
     [sender setSelected:YES]; 
     NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"restoName"] mutableCopy]; 
     [array addObject:dicArray]; 
     [[NSUserDefaults standardUserDefaults] setObject:array forKey:@"restoName"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 

     //NSLog(@"%@",[[NSUserDefaults standardUserDefaults] stringForKey:@"restoName"]); 
    } 
} 
__NSCFArray'類'

。請注意,屬性列表中的字典和數組也必須僅包含屬性值。

+2

檢查你的字典裏沒有任何空值或沒有? – Exploring 2013-04-10 07:45:16

回答

17

您只能在NSUserDefaults中存儲屬性列表類型(數組,數據,字符串,數字,日期,字典)或URL。您需要將模型對象轉換爲這些對象。

+0

我該怎麼做,對不起 – mavusane 2013-04-07 09:05:04

+3

例如,您可以創建一個NSDictionary並將對象的所有屬性放在其中。或者你可以實現NSCoding並使用它,它會是類似的(應該是大量的文檔;搜索NSKeyedArchiver,如果NSCoding沒有找到它們) – 2013-04-07 17:04:44

+0

你好隊友看到我的代碼上面我已經創建了一個數組,但仍然是同樣的問題,不能相信它的3整天試圖這樣做,用編碼方法我不知道在哪裏把NSObject ,因爲我的detailView類實現了這個@interface DetailViewController:UIViewController – mavusane 2013-04-07 23:40:13

57

如果你不想理會確保您所有的字典中的值是屬性列表類型,那麼你可以簡單地轉換成字典NSData的,

NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; 
[def setObject:[NSKeyedArchiver archivedDataWithRootObject:self.myDictionary] forKey:@"MyData"]; 
[def synchronize]; 

並重新進入沙盒字典:

NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; 
NSData *data = [def objectForKey:@"MyData"]; 
NSDictionary *retrievedDictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
self.myDictionary = [[NSDictionary alloc] initWithDictionary:retrievedDictionary]; 

希望這可以幫助別人。 :d


附加說明:如果你得到一個可變的字典,或可變數組,然後記住使用「mutableCopy」的方法。否則,您無法從檢索到的字典/數組中添加或刪除對象。例如:

NSMutableDictionary *retrievedDictionary = 
[[NSKeyedUnarchiver unarchiveObjectWithData:data] mutableCopy]; 

或者

NSMutableArray *retrievedArray = 
[[NSKeyedUnarchiver unarchiveObjectWithData:data] mutableCopy]; 
+4

謝謝,這節省了我頭痛或三。 – mmr 2014-02-18 20:47:35

+1

快速簡單的解決方案。謝謝。 – user3344977 2014-03-27 05:16:50

+2

這應該被接受..感謝很多@Rocotilos。 – TamilKing 2015-10-13 07:18:57