0

这是代码:

NSNumber *taskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];    
NSInteger *intTaskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];

self.taskList是在 ViewController 的方法NSArray中填充核心数据获取请求的一个。is: 1 is: 269303816 实际上,core data中存储的值是 : 1viewDidLoad
taskId
intTaskId

下面是我的问题:
1、我很困惑为什么NSInteger不正确?
2,我是否必须更换NSIntegerNSNumber避免任何其他问题?

4

1 回答 1

3

NSNumber是一个对象,而NSInteger只是typedef一个原始(非对象)类型(如int)。NSInteger不是子类NSNumber。Core Data 返回数字作为NSNumber. 你得到了奇怪的NSInteger值,因为它指向一个类型的对象,NSNumber但试图打印它,就好像它只是一个整数一样。

您需要替换NSIntegerNSNumber以避免任何问题。您还可以使用intValueon 方法NSNumber取回NSInteger

NSNumber *objTaskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];
NSInteger *intTaskId = [objTaskId intValue];

如果您想进行比较(大于、等于、小于)或算术(您不能将 an 添加NSNumber到另一个NSNumber或 anNSNumber到原始类型,如intor float),则需要执行此操作。

于 2012-06-17T10:25:43.313 回答