1

下面是将额外值与按钮相关联的代码

- (int)uniqueId
{
    return (int)objc_getAssociatedObject(self, uniqueIdStringKeyConstant);
}

- (void)setUniqueId:(int)uniqueId
{
    objc_setAssociatedObject(self, uniqueIdStringKeyConstant, [NSNumber numberWithInt:uniqueId], OBJC_ASSOCIATION_ASSIGN);
}

当我尝试获取它的值时,uniqueId它会返回错误的值。

[button1 setUniqueId:1];
NSLog(@"%d",[button1 uniqueId]); // in console it prints 18

谁能帮我找出我做错了什么?

4

2 回答 2

2

您正在存储一个NSNumber,然后将其转换为int. 你不能这样做——强制转换不会改变数据类型。

尝试这个:

- (int)uniqueId
{
    NSNumber *number = objc_getAssociatedObject(self, uniqueIdStringKeyConstant);
    return number.intValue;
}
于 2015-02-05T17:09:06.613 回答
2

您将 anNSNumber直接转换为 an int,这将返回对象指针地址的值。

你想做的是:

return [(NSNumber *)objc_getAssociatedObject(self, uniqueIdStringKeyConstant) intValue];
于 2015-02-05T17:09:29.163 回答