尝试插入非属性值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。 您需要将您的模型对象转换为这些对象。