【发布时间】:2011-09-29 15:00:40
【问题描述】:
我的 Core Data 应用程序有一个奇怪的问题。
我的应用中有三个实体,但今天我发现其中一个有问题。我有问题的实体称为Invoice,它有很多属性,包括Products。它是由 NSDictionaries 编码的 NSArray(通过默认的 NSValueTransformer)。
一切正常 - 我创建我的发票、它的客户、它的产品等。一切正常。
但是,当我从列表中选择我的发票,然后尝试编辑其产品并点击“保存”按钮时,我的保存仅在我的应用程序终止之前有效。
问题仅在于我的 products 数组 - 其余的(例如付款日期、客户等)保存。
我在做什么
我通过我的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();
}
一切都保存到终止:客户、产品、日期。但只有产品在终止后“重置”。
有人吗?
【问题讨论】:
-
澄清:“产品被‘重置’”是什么意思?你的意思是产品属性没有保存?你的意思是它恢复到以前的值?换句话说,期望在重启后看到
products属性,你实际上看到了吗? -
您没有使用实体和关系而不是 NSArray 中的一堆 NSDictionary 对象的任何特殊原因?这是一个非常麻烦且(很可能)缓慢的设置。
-
1.我的意思是产品属性已保存,但在我的应用程序终止后,它会返回到以前的值。 2.我不使用关系,因为我一直需要产品,即使用户已经删除了它们。我有一个名为“产品”的实体,但在我的“发票”中存储了它的副本。
-
问题可能出在转换器或 Invoice 类中。你用的是定制变压器吗?如果是这样,请发布代码。如果不是,
product属性的 Invoice 类访问器是什么样的?
标签: iphone ios core-data nsmanagedobject