1

さて、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"];
      }   
}

そして、theArraytheArrayの存続期間中、変更された値を保持することを期待しますか?

または、これを行う必要がありますか?

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でも同じです。

4

1 に答える 1

1

あなたはそれを最初の方法でやるべきです。それぞれtheDictがオリジナルへのポインタであり、コピーではありません。

編集:質問の編集後、回答の残りの部分は関連しなくなりましたが、コメントにコンテキストを与えるために残されました。オブジェクト所有権ドキュメントへのリンクが多すぎることは決してないためです。


あなたのautorelease vs release脇は、他の何かについての誤解の可能性を示唆していますが、これはおそらくそれを詳細に説明する時ではありません。オブジェクトの所有権に関するドキュメントをもう一度見て、autorelease実際の意味を確実に理解することをお勧めします。

(ところで、私があなたの質問を完全に誤解していない限り、あなたのイニシャルは私が思うtmpArrayはずです。そしてループ変数のタイプはではなくでなければなりません。)theArrayNSMutableDictionary*NSMutableDictionary

于 2010-06-24T22:03:24.463 に答える