2015-02-05 167 views
0

下面是一个额外的价值有一个按钮objc_getAssociatedObject返回错误的值

- (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 

任何人都可以帮助我找出我做错了什么吗?

回答

2

你直接投NSNumberint,这将返回对象的指针地址的值。

你想要做什么:

return [(NSNumber *)objc_getAssociatedObject(self, uniqueIdStringKeyConstant) intValue]; 
+0

感谢名单兄弟它的工作... – 2015-02-05 17:26:16

2

您正在存储NSNumber,然后将其转换为int。你不能这样做 - 铸造不会改变数据类型。

试试这个:

- (int)uniqueId 
{ 
    NSNumber *number = objc_getAssociatedObject(self, uniqueIdStringKeyConstant); 
    return number.intValue; 
} 
+0

感谢名单老兄它的工作... – 2015-02-05 17:24:23