cStructをNSMutableArrayに追加する方法のメモ

(※Xcodeで iOS6シミュレータを使って確認)

ポイント

・NSValueに変換 @encode

・NSValueから復元 getValue

サンプルコード

#import “ViewController.h”

typedef struct {

    int a;

    int b;

} cStructForNSArray;

@implementation ViewController

– (void)viewDidLoad

{

    [super viewDidLoad];

    // 格納用

    NSMutableArray *arr = [[NSMutableArray alloc] init];

    

    

    // 追加

    for (int i=0; i<5; i++) {

        cStructForNSArray data = {i, -i};

        

        // NSValueに変換

        [arr addObject:[NSValue value:&data withObjCType:@encode(cStructForNSArray)]];

    }

    

    // 中身を確認

    for (NSValue *v in arr) {

        // 復元

        cStructForNSArray data;

        [v getValue:&data];

        

        //画面に出してみる

        UILabel *label = [[UILabel alloc] init];

        label.text = [NSString stringWithFormat:@”a=%d, b=%d”, data.a, data.b];

        label.font = [UIFont systemFontOfSize:12];

        label.frame = CGRectMake(30, 50 + data.a * 30, 100, 30);

        [self.view addSubview:label];

    }

    

    // タイトル

    UILabel *label = [[UILabel alloc] init];

    label.text = @”cStruct and NSArray”;

    label.font = [UIFont boldSystemFontOfSize:20];

    label.frame = CGRectMake(10, 10, 300, 30);

    [self.view addSubview:label];

}