2011-07-13 24 views
1

構造体のNSMutableArrayを作成するにはどうすればよいですか?構造体のNSMutableArray?

私は構造体の配列をstandard-cで作成できますが、objective-cで問題が発生しています。

標準-C:あなたはNSArrayの中にそれを置くためにNSDataのかNSValueオブジェクトに各structをコピーする必要が

struct person people[10]; 

おかげ

+3

私は過去2日間ほどあなたの質問が多く出てきているのを見てきました。彼らはObjective-Cのやり方や、一般的なOOPとちょっとした戦いをしなければならないようです。友人は、人々は 'People'というクラス呼び出しでなければならず、' NSArray'または 'NSMutableArray'に追加されるべきです。メモリ管理権を得るのはずっと簡単です。 –

+2

私はそれをさらに一歩進めたいと思います。 **構造体を使用しないでください**。あなたの 'person'が' Person'クラス(少なくとも今のところあなたの質問で示された理由はありません)になれない理由はありません。あなたは完全な時間の無駄である道を歩いているようです。 – bbum

答えて

3

// in 
struct person someGuy = ...; 
NSData *personData = [NSData dataWithBytes:&someGuy length:sizeof(struct person)]; 
[personArray addObject:personData]; 

// out 
NSData *personData = [personArray objectAtIndex:whatever]; 
struct person someGuy; 
[personData getBytes:&someGuy]; 

あなたがそうでなければ、EXC_BAD_ACCESSの多く(またはより悪い、例外なく、単なる神秘的なゴミデータ)が表示されます、スタックとヒープとどのようにポインタで動作(または学ぶ準備ができている)の間の違いを理解する必要があります。

+0

構造体の配列に対してObjective-cメソッドを行うには多くの作業が必要なので、構造体の標準C規約を実装するだけでなく、アプリケーションがクラッシュするリスクを負わなければならない理由は何ですか? –

+0

あなたのユースケースについてもっと知ることなくそれに答えることは不可能です。しかし、一般的には、それらを使用するCライブラリとのインタフェースを必要としない限り、C構造体を混乱させないでください。 – benzado

+0

マップやベクトルのようなC++ STLコンテナを使用してください。 – Suran