核心数据保存问题:无法更新可转换属性(NSArray)
我的核心数据应用程序中有一个奇怪的问题。
我的应用中有三个实体,但今天我发现其中一个问题。 我有问题的实体称为Invoice
,它有许多属性,包括Products
。 它编码NSDictionaries NSArray(通过默认NSValueTransformer)。
一切工作正常 – 我创build我的发票,客户,其产品等一切正常。
但是 ,当我从列表中select我的发票,然后尝试编辑其产品,然后单击“保存”button,我的保存工作,直到我的应用程序终止。
问题是只有我的products
数组 – 其余(如付款date,客户端等)保存。
我在做什么
我通过我的Invoice
对象
NSManagedObject *inv = [self.fetchedResultsController objectAtIndexPath:indexPath]; invoiceEditor.invoice = inv;
并保存我的数据(在我的InvoiceEditor
VC):
[self.invoice setValue:client forKey:@"Client"] // NSDictionary; [self.invoice setValue:products forKey:@"Products"] // NSArray of NSDictionaries; [self.invoice setValue:pmDate forKey:@"PaymentDate"] // NSDate; // other attributes NSManagedObjectContext *context = self.invoice.managedObjectContext; NSError *error = nil; if (![context save:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); }
万物保存直到被终止:客户,产品,date。 但只有产品在终止后“重新设置”。
任何人?
刚刚发现问题。 从模型对象实施指南 :
如果用于表示属性(例如NSArray和NSMutableArray)的类的可变和不可变版本,则通常应该将get访问器的返回值声明为不可变对象,即使内部模型使用可变对象。
而我的products
数组实际上是一个NSMutableArray
实例。 我通过复制products
来解决它(所以我把可变数组转换成了不可变数组)。 现在起作用了。 :)而且我不需要开始赏金…
事实上,你刚刚发现了这个问题。 对不起,我只是读你的问题,但CoreData在保存期间有几个问题。
CoreData实体中的每个属性都必须是不可变的对象。