2013-06-26 19 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