2013-06-26 20 views
1

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

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

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”其实只是希望它在高速缓存中的地图,并返回从地图参考。

输出类似于此为第1对对象:

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

类别与invoiceItems之间的反向关系可能完全没有设置,或者是“一对一”关系。它需要是一个“to-many”,否则之前的项目会被删除。

+0

是的!就是这样!该旗帜尚未确定。 谢谢! – CasaDelGato