从存储整数的数组中分配按钮标记

时间:2011-04-29 21:18:33

标签: iphone objective-c cocoa-touch

我正在尝试为按钮分配标签。正常命令是:

button.tag = 1;

标签必须是整数。

我的问题是我想分配一个存储在数组中的整数(tabReference),它又是类(currentNoteBook)的一部分。所以我需要这个:

int k = 0;    
button.tag = [currentNoteBook.tabReference objectAtIndex:k]; // This is where I get the warning.

然而,这似乎不起作用,因为xCode告诉我:传递setTag的参数1:从没有强制转换的指针生成整数。

我的数组看起来像这样(我试图使用整数......):

NSMutableArray *trArray = [[NSMutableArray alloc] init];
        NSNumber *anumber = [NSNumber numberWithInteger:1];
        [trArray addObject: anumber];
        [trArray addObject: anumber];
        [trArray addObject: anumber];
        [trArray addObject: anumber];
currentNoteBook.tabReference = trArray;

2 个答案:

答案 0 :(得分:1)

NSMutableArray存储可修改的对象数组。您不能直接在NSMutableArray中存储整数。这就是为什么你必须做这样的事情来存储一堆整数:

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

int max = 100;

for (int i = 0; i < max; i++) 
{
    NSNumber *temp_number = [NSNumber numberWithInt:arc4random() % max];

    [the_array addObject:temp_number];
}

当然,你可以做同样的事情并在那里存储其他东西:

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

int max = 100;

int max_x = 50;
int max_y = 25;
int max_w = 100;
int max_h = 200;

for (int i = 0; i < max; i++) 
{
    CGFloat temp_x = arc4random() % max_x;
    CGFloat temp_y = arc4random() % max_y;
    CGFloat temp_w = arc4random() % max_w;
    CGFloat temp_h = arc4random() % max_h;

    CGRect temp_rect = CGRectMake(temp_x, temp_y, temp_w, temp_h);

    [the_array addObject:[NSValue valueWithCGRect:temp_rect]];

}

当你去检索这些值时,你需要指定你想从数组中得到什么,因为同一个数组可以包含非常不同的对象。

对于你的整数:

for (int i = 0; i < max; i++) 
{
    NSLog(@"%i: %i", i, [[the_array objectAtIndex:i] intValue]);
}

对于CGRect示例:

for (int i = 0; i < max; i++) 
{
    CGRect temp_rect = [[the_array objectAtIndex:i] CGRectValue];

    NSLog(@"%i: x:%f y:%f w:%f h:%f", i, temp_rect.origin.x, temp_rect.origin.y, temp_rect.size.width, temp_rect.size.height);

}

简而言之,您在代码中存储的对象不是整数。你必须将它们作为对象拉出来,然后提取你的整数以获得你的数据。

答案 1 :(得分:0)

刚刚在我提出的另一个问题中找到答案:

必须是:

btn.tag = [[currentNoteBook.tabReference objectAtIndex:k] intValue];