尝试插入非属性值Objective C

嗨,我想创build一个餐馆对象,我的应用程序有不同的餐馆列表,我希望能够为用户添加优惠餐厅,这个代码是不工作

- (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'。 请注意,属性列表中的字典和数组也必须仅包含属性值。

如果你不想担心所有的字典值是属性列表types,那么你可以简单地将字典转换成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]; 

您只能在NSUserDefaults中存储属性列表types(数组,数据,string,数字,date,字典)或URL。 您需要将您的模型对象转换为这些对象。