2011-08-10 113 views
0

我有一個NSMutableArray,purDesc,它包含一個NSMutableDictionary,purDetails。當我使用NSLog(@"%@", purDesc);它返回空的空間裏應該有dictionarys如下:字典陣列

singleton purDesc Dump:(
     { 
    }, 
     { 
    }, 
     { 
    }, 
     { 
    }, 
     { 
    } 
) 

現在尺寸/外觀/轉儲我每次添加一個詞典,以反映時代的字典被添加/刪除數量的時間變化。下面是我的XML解析器所採取的代碼片段:

...

else if ([elementName isEqualToString:@"purDesc"]) 
{ 
    //close purDisc 
    // dumps dictionary into log 
    NSLog(@"End of purDesc"); 
    NSLog(@"Dump:%@", [purDesc description]); 

    [singleton setPurDesc:purDesc];//sets this response to the response in the singleton 

    NSLog(@"singleton purDesc Dump:%@", [[singleton purDesc] description]); 
    return;//we're done here 
} 
else if ([elementName isEqualToString:@"PurDetails"]) 
{ 
    //close purDetails 
    // dumps dictionary into log 
    NSLog(@"End of PurDetails"); 
    [purDetails addEntriesFromDictionary:description];//sets current purDetails to current description 
    NSLog(@"Dump:%@", [purDetails description]); 

    [purDesc addObject:purDetails];//adds purDetails dictionary to purDesc 
    [purDetails removeAllObjects]; 
    NSLog(@"Current purDesc:%@", [purDesc description]); 
} 

什麼我做錯了,爲什麼日誌來了半是空的?

+1

你是如何填寫數組和字典的?我猜字典*是空的。什麼是單身人士,什麼是[singleton purDesc]?它與purDesc有什麼關係?實際上很難看到發生了什麼,更不用說出了什麼問題。 –

+0

如果我登錄他們,它顯示的值。例如,NSLog(@「Dump:%@」,[purDetails description]);返回轉儲:{ amt =「1.29」; desc = test; } – Baub

+1

是的,但那是purDetails。我需要看更多的代碼才能看到什麼是什麼,什麼是錯的。 –

回答

3

我看到你做的事:

[purDesc addObject:purDetails];//adds purDetails dictionary to purDesc 
[purDetails removeAllObjects]; 

存儲了參考purDetailspurDesc,並增加其保留計數,但它不會使副本。所以,如果你removeAllObjects,字典的​​內容丟失。您在purDesc中「存儲」了對它的引用的事實不會改變這一點。我想你看到的是這個或類似行爲的結果。

您無法重新使用字典。你將不得不每次分配和初始化一個新的。你應該發佈你有本地的,但不清楚它。

我需要查看更多的代碼,以瞭解如何改進您的設計,因此這不是問題,並且正確處理內存管理。

+0

這個完美的作品!謝謝! – Baub

+0

對於任何發現它的人,我只是刪除了該行[purDetails removeAllObjects];現在我每次需要一個新的時候都會分配和初始化。 – Baub

+0

儘管如此,請務必注意涉及此問題的內存管理(尤其是引用計數)問題。你應該釋放你分配的東西。只需要一些經驗知道何時發佈。我花了幾個星期的時間才弄清楚,有時候我還是必須認真思考這樣的事情。我認爲ARC會使這一點更容易一些。 –