1

私のプロジェクトでは、に保存NSMutableArrayしてNSMutableDictionaryいます。このタスクをFORループで実行しています。実際の状況は、

forループ内

1.まず、オブジェクトを に保存しましたNSMutableArray

2.鍵付きNSMutableArrayで収納NSMutableDictionary

NSMutableArray3.次に、反復前にすべてのオブジェクトを削除します。

私の問題、NSLog の場合、ステップ 2 の後、配列とディクショナリ内のオブジェクトを見ることができます。しかし、ステップ 3 の後、NSLog の場合NSMutableArray、キーのみが表示され、ディクショナリ内のオブジェクトも削除されます。 .NSMutableDictionayNSMutableDictionay

これは私がプロジェクトで使用しているコードです。

 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];
         }

 }

ありがとうございました。

4

1 に答える 1

5

変更可能なものをコンテナーに格納する場合、その変更可能なオブジェクトをコンテナーの外部から使用することを停止する必要があります。そうしないと、変更が既に保存されているオブジェクトに反映されます。

たとえば、変更可能な配列を作成し、それにデータを入力し、それを何らかのキーに保存してから配列をクリアすると、保存された配列も同様にクリアされます。これは、格納された配列と消去した配列が実際には同じオブジェクトであるためです。コレクションは、渡されたオブジェクトへの参照を格納します。

これを回避するには、配列を保存する前に不変のコピーを作成します。

[muDictImport setObject:[NSArray arrayWithArray:muArrImport]
                 forKey:[splitImportMIB objectAtIndex:1]];
于 2013-04-10T11:00:00.663 に答える