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];
}