18

.NET Webサービスから返されるカスタムオブジェクトのリストがあり、CoreDataを持つ親エンティティからのTo-Many関係を使用してそれらを格納しています。

NSSetをUITableViewのデータソースとして使用し、行が選択されたときに新しいコントローラーをスタックにプッシュしたいと思います。

使用する場合[NSSet allObjects]、返される配列は常に同じ順序になりますか?(セットが順序付けられていないので、私は推測しません)

そうでない場合は、セルの名前を取得するためNSArray *myArray = [mySet allObjects];にinを使用してから、プッシュしようとしているViewControllerにオブジェクトを割り当てるために再びinを使用できますか?cellForRowAtIndexPathtextLabeldidSelectRowAtIndexPath

私はすでに親オブジェクトを合成していUITableViewDelegateます。NSArray合成してallObjects一度だけ使って作成することも考えviewDidLoadましたが、これはメモリ内のデータを複製しています

4

3 に答える 3

33

NSSetは(技術的に)順序を維持しないため、それらが同じ順序になるという保証はありません。オブジェクト毎回同じ順序で戻ってくる場合は、それが実装の詳細であり、文書化されておらず、フレームワークの将来のリリースで変更される可能性があることに注意してください。

ドキュメントを引用するには:

-[NSSet allObjects]戻り値)[a] nセットのメンバーを含む配列、またはセットにメンバーがない場合は空の配列。配列内のオブジェクトの順序は定義されていません。

(強調を追加)

于 2010-10-04T15:48:06.617 に答える
8

NSArrayの間に1回抽出するというあなたの解決策viewDidLoadは、正しいものです。実際には、多くのメモリを複製することはありません。オブジェクトはまだ一度だけメモリに残ります。それはあなたのNSSetNSArray両方がそれらのオブジェクトへのポインタを含むということだけです。

于 2010-10-04T18:38:45.467 に答える
3

NSSetの代わりにNSOrderedSetを使用します。

于 2015-06-08T01:20:22.053 に答える