14

私はたくさんの を持ってLessonおり、クラスはうまく機能しています。これらのレッスンで動作するビュー コントローラーがあります。このコントローラは a のアップロード ステータスを知る必要があるため、 as キーをlesson持つ NSDictionary とアップロード ステータスのパーセントを持つ があります。LessonNSNumber

これは問題です。なぜなら、を挿入した後、後で同じ(おそらく で)Lesson検索を行い、進行状況を取得する必要があるからです。キーは NSDictionary にコピーされるため、これは機能しません。LessoncellForRowAtIndexPath:

次のようなものでキーを保存して取得するのは良い形ですか:

NSNumber *key = [NSNumber numberWithUnsignedInt:[obj hash]];
[dict setObject:@"... upload progress" forKey:key];

または、より良いアプローチがありますか?

4

4 に答える 4

37

私は過去にこの手法を何度も使用しており、キー オブジェクトを NSValue にラップすることで大きな成功を収めています。

NSValue *myKey = [NSValue valueWithNonretainedObject:anInstance];
id anItem =[myDict objectForKey:myKey];

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/nsvalue_Class/Reference/Reference.html#//apple_ref/occ/clm/NSValue/valueWithNonretainedObject :

(フォーマットを許してください。私はiPhoneを使用しています。後でフォーマットします:-)

于 2012-07-17T23:55:42.193 に答える
5

「キーが NSDictionary にコピーされているため、これは機能しません。」レッスン クラスで-isEqual:andを実装しようとしましたか? -hash検索に使用するレッスンと、辞書にコピーされたものをキーとして比較したときに評価さ-isEqual:れるYES場合は、問題ないと確信しています。

于 2012-07-17T23:49:06.650 に答える
0

レッスンに一意の番号 (または識別子) があると仮定すると、それがキーになります。NSMutableDictionary を使用すると、後でディクショナリを更新できますが、(Lession の更新時に) より高い値を持つ新しい数値を書き込みますが、キーは同じになります。

于 2012-07-17T23:55:38.910 に答える