IOS 对象字段意外设置为 nil

标签 ios nsmanagedobject null

我知道我一定是在做一些愚蠢的事情,但还没弄清楚这一点。 我有一些解析 xml 文件的代码。对象大多是 NSManagedObject 类型。
其中之一 (InvoiceItem) 有一个字段“category”,它是对另一个 NSManagedObject 的引用。所以在解析时,我查找引用并进行分配。 下一个 InvoiceItem 恰好引用相同的类别,并且一旦分配了该类别对象 - 前一个 InvoiceItem 中的引用将设置为 nil!

我无法包含所有代码,因为代码太多了。 这是相关的 block :

  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 之前存在,并在分配之后消失。

这总是以对任何类别对象的最后引用有效结束。运行中的所有先前引用都被清除。

有什么想法吗?

最佳答案

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

关于IOS 对象字段意外设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17326780/

相关文章:

java - 明确消除Java中重载构造函数的歧义

sql - 使用可以为空的列测试不平等

objective-c - 使用 Objective C 发送 POST 到 Web 服务器

cocoa - NSManagedObjectModel 中合并模型的跨模型关系?

iphone - 手动调用 applicationDidEnterBackground

ios - 核心数据。检测相同的对象?

swift - 如何一对多地使用生成的 NSManagedObject 类访问器?

MySQL 将日期与可能返回 null 的子查询的最大值进行比较

ios - 如何缩放专为 iPad 设计的 UIView 以与 iPhone 配合使用?

ios - Objective-C 中的 UILexicon