2013-04-10 88 views
1

在我的項目,我存儲NSMutableDictionaryNSMutableArray。我是在FOR loop.The實際情況執行此任務,在NSMutableDictionary中存儲NSMutableArray變爲空?

for循環

1.Firstly我存儲一些對象NSMutableArray

2.將此NSMutableArray存儲在NSMutableDictionary的密鑰中。

3.然後在迭代之前刪除NSMutableArray中的所有對象。

我的問題,如果我步驟2後的NSLog NSMutableArrayNSMutableDictionay,我可以在步驟3之後看到在陣列和dictionary.But的對象,如果我的NSLog NSMutableDictionay,僅顯示鍵,在字典對象也removed.What我我錯了。請提出一些解決方案。

這是我在項目中使用的代碼。

for (int j=0; j<wordsofline.count; j++) { 
    NSString *importstr=[wordsofline objectAtIndex:j]; 
    NSString *importtrim=[importstr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

    if ([importtrim rangeOfString:@"FROM"].location != NSNotFound) { 
     NSArray *splitImportMIB = [importtrim componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
     NSLog(@"array %@ ,,,%@",splitImportMIB,muArrImport); 
     [muDictImport setObject:muArrImport forKey:[splitImportMIB objectAtIndex:1]]; 
     NSLog(@"Dictionary %@",muDictImport); 
     [muArrImport removeAllObjects]; 
     NSLog(@"Dictionary %@",muDictImport); 
     break; 
     } 

     if (![importtrim isEqualToString:@""] && [importtrim rangeOfString:@"FROM"].location == NSNotFound) { 
     [muArrImport addObject:importtrim]; 
     } 

} 

謝謝。

+0

顯示你的循環存儲您陣列之前作出的不可變副本,例如。 – 2013-04-10 10:55:21

+0

@AnoopVaidya:海我編輯了我的代碼,請檢查。 – NSUserDefault 2013-04-10 10:59:38

+0

當然。您正在分配指針,然後刪除該指針中的所有對象。 – Desdenova 2013-04-10 10:59:39

回答

5

當您在容器中存儲可變的內容時,您必須停止在容器外使用該可變對象。否則,您的修改將反映在您已存儲的對象中。例如,如果您創建了一個可變數組,則用數據填充它,將它存儲在某個鍵上,然後清除數組,然後清除存儲數組。這是因爲存儲的數組和您清除的數組實際上是相同的對象:集合存儲對您傳遞的對象的引用。

爲了避免這種情況,通過使用

[muDictImport setObject:[NSArray arrayWithArray:muArrImport] 
       forKey:[splitImportMIB objectAtIndex:1]]; 
+0

所以我應該將我的MutableArray存儲在單獨的數組中,然後使用Dictionary中的新數組存儲它。對? – NSUserDefault 2013-04-10 11:06:11

+0

謝謝你爲我工作。 – NSUserDefault 2013-04-10 11:13:12

+1

@NSUserDefault不客氣!如果你希望存儲數組保持可變,你可以創建一個可變副本,或者創建一個新數組,以便在將當前數組放入數組後立即替換'muArrImport',即調用'muArrImport = [NSMutableArray array]; '在'setObject:forKey:'調用之後。 – dasblinkenlight 2013-04-10 11:27:43

相關問題