objc_getAssociatedObject returns 错误的值
objc_getAssociatedObject returns the wrong value
下面是将额外值与按钮相关联的代码
- (int)uniqueId
{
return (int)objc_getAssociatedObject(self, uniqueIdStringKeyConstant);
}
- (void)setUniqueId:(int)uniqueId
{
objc_setAssociatedObject(self, uniqueIdStringKeyConstant, [NSNumber numberWithInt:uniqueId], OBJC_ASSOCIATION_ASSIGN);
}
当我尝试获取 uniqueId
的值时,它 returns 是错误的值。
[button1 setUniqueId:1];
NSLog(@"%d",[button1 uniqueId]); // in console it prints 18
谁能帮我找出我做错了什么?
您正在存储 NSNumber
,然后将其转换为 int
。您不能那样做 - 强制转换不会更改数据类型。
试试这个:
- (int)uniqueId
{
NSNumber *number = objc_getAssociatedObject(self, uniqueIdStringKeyConstant);
return number.intValue;
}
您正在将 NSNumber
直接转换为 int
,这将 return 您的对象指针地址的值。
您想做的是:
return [(NSNumber *)objc_getAssociatedObject(self, uniqueIdStringKeyConstant) intValue];
下面是将额外值与按钮相关联的代码
- (int)uniqueId
{
return (int)objc_getAssociatedObject(self, uniqueIdStringKeyConstant);
}
- (void)setUniqueId:(int)uniqueId
{
objc_setAssociatedObject(self, uniqueIdStringKeyConstant, [NSNumber numberWithInt:uniqueId], OBJC_ASSOCIATION_ASSIGN);
}
当我尝试获取 uniqueId
的值时,它 returns 是错误的值。
[button1 setUniqueId:1];
NSLog(@"%d",[button1 uniqueId]); // in console it prints 18
谁能帮我找出我做错了什么?
您正在存储 NSNumber
,然后将其转换为 int
。您不能那样做 - 强制转换不会更改数据类型。
试试这个:
- (int)uniqueId
{
NSNumber *number = objc_getAssociatedObject(self, uniqueIdStringKeyConstant);
return number.intValue;
}
您正在将 NSNumber
直接转换为 int
,这将 return 您的对象指针地址的值。
您想做的是:
return [(NSNumber *)objc_getAssociatedObject(self, uniqueIdStringKeyConstant) intValue];