IOS对象字段意外设置为nil

时间:2013-06-26 17:33:44

标签: ios nsmanagedobject null

我知道我必须做一些愚蠢的事,但却无法弄明白这一点。 我有一些解析xml文件的代码。对象主要是NSManagedObject类型 其中一个(InvoiceItem)有一个字段“category”,它是对另一个NSManagedObject的引用。因此,在解析时,我查找引用并进行赋值。 下一个InvoiceItem恰好引用相同的类别,并且只要分配了该类别对象,前一个InvoiceItem中的引用就会设置为nil!

我不能包含所有代码,因为它有很多。 这是相关的块:

  for (int i = 0; (i < invoice.invoiceItems.count); i++) {
     NSLog(@"InvoiceItemParser: didStartTag[A,%d]: ii = %ld, cat=%ld", i, (long) ((InvoiceItem *)[[invoice invoiceItems] objectAtIndex:i]), (long) ((InvoiceItem *)[[invoice invoiceItems] objectAtIndex:i]).category);
  }
  ii.category = (ChargeCategory *)[self.db getObjectOfType:@"ChargeCategory" withDBID:catid];
  NSLog(@"InvoiceItemParser: didStartTag[B]: ii=%ld, cat=%ld", (long) ii, (long) ii.category);
  for (int i = 0; (i < invoice.invoiceItems.count); i++) {
     NSLog(@"InvoiceItemParser: didStartTag[C,%d]: ii = %ld, cat=%ld", i, (long) ((InvoiceItem *)[[invoice invoiceItems] objectAtIndex:i]), (long) ((InvoiceItem *)[[invoice invoiceItems] objectAtIndex:i]).category);
  }

“self.db getObjectOfType”实际上只是在缓存地图中查找,并从地图返回引用。

第一对对象的输出如下所示:

InvoiceItemParser: didStartTag[B]: ii=164718368, cat=361986368
InvoiceItemParser: didEndTag[B]: ii=164718368, cat=361986368
InvoiceItemParser: didEndTag[C]: ii=164718368, cat=361986368
InvoiceItemParser: didEndTag[D,0]: ii = 164718368, cat=361986368
InvoiceItemParser: didStartTag[A,0]: ii = 164718368, cat=361986368
InvoiceItemParser: didStartTag[B]: ii=361994624, cat=361986368
InvoiceItemParser: didStartTag[C,0]: ii = 164718368, cat=0

注意对象164718368上的类别就在分配给对象361994624之前,并且刚好在之后。

这总是最后只有对任何有效类别对象的引用。该运行中之前的所有参考文献均为零。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

invoiceItems类别的反向关系可能根本没有设置,或者是“一对一”的关系。它需要是“对多”,否则之前的项目将被取消。