2

我对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

我需要将 int of 2 转换为数字 2 以及将所有其他数字转换为正确的数字...谁能告诉我为什么要进行此转换?我尝试阅读NSNumber手册,但我什么也没找到

4

3 回答 3

8

尝试:

NSLog(@"number w index %@, %d",[NSNumber numberWithInteger:index],index);
                       ^^

%@格式说明符将调用该方法,该[NSNumber description]方法应返回您所追求的值。您的原始代码将返回NSNumber对象的地址,而不是其内容。

于 2013-05-19T08:49:05.730 回答
4

尽管这个问题已经得到解答,但我想我会为未来的读者提供一个更长的答案:

发生了什么?
%d是一个C 格式字符串,用于指示传递的参数之一是整数 ( 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);
于 2013-05-20T01:13:13.420 回答
2

你应该使用,

[[NSNumber numberWithInteger:index] intValue] 

获取整数值,NSNumber,正在持有

于 2013-05-19T09:00:00.587 回答