Ula*_*cak 1 database objective-c nsuserdefaults nsmutablearray ios
我创建了一个简单的数据库,并放入了NSUserDefaults。我的数据库是NSMutableArray,其中包含字典和数组。从NSUSerDefaults创建NSMutableArray时,无法将任何对象添加到NSMutableArray内的可变对象中。这是我的代码:
NSMutableArray *arrayOne = [NSMutableArray arrayWithContentsOfFile:[self createEditableCopyOfIfNeededWithFileName:@"Form.plist"]];
NSUserDefaults *ayarlar = [NSUserDefaults standardUserDefaults];
[ayarlar setObject:arrayOne forKey:@"form"];
NSMutableArray *arrayTwo = [NSMutableArray arrayWithArray:[[ayarlar objectForKey:@"form"] mutableCopy]];
[[[arrayTwo objectAtIndex:0] objectForKey:@"itemlar"] addObject:@"hop"];
Run Code Online (Sandbox Code Playgroud)
这是错误:
“ NSInternalInconsistencyException”,原因:“-[__ NSCFArray insertObject:atIndex:]:发送给不可变对象的变异方法”
我该如何进行这项工作?谢谢大家。
NSUserDefaults不是存储数据的正确位置。首先,它仅应用于少量数据,例如设置。其次,即使您设置了可变对象,它也总是返回不可变的对象。制作第一个数组的可变副本无济于事,因为只有数组是可变的。mutableCopy方法不会触及该数组中的所有内容,并且保持不变。
您应该使用NSPropertyListSerialization类从文件读取和写入数据。阅读时,您可以传递控制阅读对象可变性的选项。您将需要在此处传递NSPropertyListMutableContainers或NSPropertyListMutableContainersAndLeaves。
首先,您的所有容器(即数组和字典)都是可变的。对于后者,叶子(即NSString和NSData对象)也将是可变的。
根据数据集的大小,您可能应该使用真实的数据库或Core Data。