頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


NSMutableArrayのカテゴリを使って構造体を配列に出し入れしたい

頭と尻尾はくれてやる! 構造体を配列に入れる方法
↑前に構造体を配列に入れる方法をメモしてたけどさ、
{
    [array addObject:[NSValue value:&clockInfo withObjCType:@encode(ClockInfo)]];
}
こんな感じでNSValueオブジェクトにしてから配列に入れるのがなんともまどろっこしいというか、理解しにくいというか。
おまけに取り出して使う時には
{
    ClockInfo clockInfo;
    [[array objectAtIndex:0] getValue:&clockInfo];
}
という具合なんだよね。一行で書けないんだ、、、
できることなら
{
    //追加
    [array addStruct:clockInfo];

    //取り出し
    ClockInfo clockInfo = [array structAtIndex:0];
}
みたいな感じで使えたらすごくわかりやすくていいんじゃね?って思ってNSMutableArrayのカテゴリでやってみたんだけどさ、、、
@implementation NSMutableArray (AddStructTest)
-(void)addStruct:(void *)structPointer
{
    NSValue *value = [NSValue value:structPointer withObjCType:@encode(void *)];
    [self addObject:value];
}
@end
↑こんな感じでNSMutableArrayのオブジェクトに追加するメソッドはできた。
実際、従来の方法で配列から取り出して使うこともできた。ここまではいいんだけどさ。
いざ取り出そうとしたんだけど、、、
@implementation NSMutableArray (GetStructTest)
-(void *)structAtIndex:(int)index
{
    NSValue *value = [self objectAtIndex:index];
    void *pointer;
    [value getValue:&pointer];
    return pointer;
}
NSValueオブジェクトを取り出すところまではいいんだけど、そこからgetValue:メソッドを使ってデータを指定した'住所'に展開する時にどうもうまくいかないんだよ。このメソッド実行時に正しい構造体の型というか中に何を持ってるかの情報が必要なのかな。ポインタだけしか情報がないからできないんだろうな。

ともかくこのカテゴリでどうこうするのはあきらめたよ、、、orz



<< Skype支払い時に注意したいブラウザによる表示内容の違い   TopPage  クラスメソッドよりもカテゴリの方がなんとなくすっきりする >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/762-ab43365b




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad