gba*_*aor 13 cocoa cocoa-touch objective-c ios
当我第一次使用这个方法它工作正常,但当我第二次调用它时,我得到错误"变异方法发送到不可变对象".问题与"addObject"命令一致.
-(IBAction) save: (id) sender{
NSMutableArray *placesT= [[NSUserDefaults standardUserDefaults] objectForKey:@"placesT"];
if (!placesT) {
placesT=[[[NSMutableArray alloc] init] autorelease];
}
[placesT addObject: [NSString stringWithFormat:@"%@", tagF.text] ];
NSUserDefaults *tUD=[NSUserDefaults standardUserDefaults];
[tUD setObject:placesT forKey:@"placesT"];
[tUD synchronize];
[self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)
}
smo*_*gan 24
正如NSUserDefaults的文档所说:"即使您将可变对象设置为值,NSUserDefaults返回的值也是不可变的." 每当您想要更改从NSUserDefaults获得的集合时,您必须获取不可变版本,进行mutableCopy修改,然后再将其重新设置.
rck*_*nes 10
这是因为存储在NSUserDefaults中的对象不是mutableArray而是普通数组.
- (IBAction)save:(id)sender {
NSMutableArray *placesT = nil;
NSArray *tempArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"placesT"];
if (tempArray) {
placesT = [tempArray mutableCopy];
} else {
placesT = [[NSMutableArray alloc] init];
}
[placesT addObject:[NSString stringWithFormat:@"%@", tagF.text]];
NSUserDefaults *tUD = [NSUserDefaults standardUserDefaults];
[tUD setObject:placesT forKey:@"placesT"];
[tUD synchronize];
[self dismissModalViewControllerAnimated:YES];
[placesT release];
}
Run Code Online (Sandbox Code Playgroud)