核心数据保存问题:无法更新可转换属性(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实体中的每个属性都必须是不可变的对象。