さて、perlのバックグラウンドから来て、私はハッシュ(iPhone用語では辞書)への参照を保持する配列に慣れています。
私が知りたいのはこれです:NSMutableDictionariesのNSArrayがある場合。次のNSMutableDictionaryをNSArrayに追加したとします。
[theArray addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys: timestamp, @"timestamp" ,name, @"name" ,lat, @"lat" ,lon, @"lon" , nil]];
その後、次のようにアレイを循環しました。
for (NSMutableDictionary theDict in theArray)
{
}
それぞれtheDict
がポインタNSMutableDictionaryのデータを表しているので、次のことができます。
for (NSMutableDictionary *theDict in theArray)
{
if ([theDict objectForKey:@"timestamp"] != nil && [[theDict objectForKey:@"timestamp"] isEqualToString:@"timestamp"])
{
[theDict setObject:@"new name" forKey@"name"];
}
}
そして、theArray
theArrayの存続期間中、変更された値を保持することを期待しますか?
または、これを行う必要がありますか?
int ct = 0;
for (NSMutableDictionary *theDict in theArray)
{
if ([theDict objectForKey:@"name"] != nil && [[theDict objectForKey:@"name"] isEqualToString:@"name you want to change"])
{
NSMutableDictionary *tmpDict = [[NSMutableDictionary alloc] initWithDictionary:theDict copyItems:YES];
[tmpDict setObject:@"new name" forKey@"name"];
[theDict replaceObjectAtIndex:ct withObject:tmpDict];
[tmpDict release];
break;
}
ct += 1;
}
それがすべてのコードになることはできませんね。--NSArrayに保持されているNSMutableDictionaryのキーの1つの値を置き換えるだけですか?
この質問が一部の人にとって明らかな場合は申し訳ありませんが、Objective-cの辞書(またはオブジェクト)へのポインタに頭を悩ませようとしています-withはperlのハッシュへの参照とほぼ同等です-コピーに対してObjective-cのオブジェクトの(またはディープコピー)。そして、NSMutableDictionariesへのポインタを(うまくいけば)保持しているNSArrayによって、問題はさらに混乱します。これはperlで行われる方法です-そして私が理解していることから-名前の外で(ポインター対参照)..それはObjective-cでも同じです。