我对objective-c很新,我正在尝试将int转换为NSNumber,以便将其保存到Core-Data中。
我有以下代码(索引是NSInteger)
- (void) associateOrNotToARoutine:(NSString*)exerciseName associate:(BOOL)associate index:(NSInteger)index
NSLog(@"number w index %d, %d",[NSNumber numberWithInteger:index],index);
然后返回
number w index 170413600, 2
我需要一个2的int被翻译成2号以及所有其他数字被翻译成正确的数字......有谁能告诉我为什么我得到这个转换?我尝试阅读NSNumber
手册,但我什么都没找到
答案 0 :(得分:8)
尝试:
NSLog(@"number w index %@, %d",[NSNumber numberWithInteger:index],index);
^^
%@
格式说明符将调用[NSNumber description]
方法,该方法应返回您之后的值。您的原始代码将返回NSNumber
对象的地址,而不是其内容。
答案 1 :(得分:4)
尽管这个问题已经得到解答,但我认为我会为未来的读者充实更长的答案:
发生了什么事?
%d
是C format string,用于表示传递的参数之一是整数(int
)ivar值。很像%f
用于float
值。
[NSNumber numberWithInteger:index]
返回指向NSNumber实例的指针。如果你使用%d
,NSLog会认为你传递了一个整数,实际上,你正在传递一个指针。所以打印指针值(内存地址)。
什么是%@
?
如trojanfoe所述:%@
告诉NSLog()
您正在传递一个对象。在这种情况下,NSLog要求对象使用字符串来描述自己...它调用description
方法。
具体答案
对于这个具体问题,有多种方法。两个主要是:
NSLog(@"number w index %@, %d", [NSNumber numberWithInteger:index], index);
NSLog(@"number w index %d, %d", [[NSNumber numberWithInteger:index] intValue], index);
额外的善意
使用%@
时,传递的对象可以是响应description
的任何内容,基本上是NSObject的后代。另外,如果您正在创建自己的类,那么重载description
以返回比默认NSObject实现更有意义的字符串是个好主意。
// Try using it with NSArray or NSDictionary and see how each describe themselves.
NSLog(@"the array description: %@", myArray);
NSLog(@"the dictionary description: %@", myDictionary);
答案 2 :(得分:2)
你应该使用,
[[NSNumber numberWithInteger:index] intValue]
获取整数值,NSNumber,持有