这是代码:
NSNumber *taskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];
NSInteger *intTaskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];
self.taskList
是一个NSArray
,它在ViewController的viewDidLoad
方法中填充了核心数据获取请求。
taskId
是:1
intTaskId
是:269303816
实际上,存储在核心数据中的值是:1
下面是我的问题:
1,我很困惑为什么NSInteger
不正确?
2,我是否必须将NSInteger
替换为NSNumber
以避免任何其他问题?
答案 0 :(得分:3)
NSNumber
是一个对象,而NSInteger
只是原始(非对象)类型的typedef
(如int
)。 NSInteger
不是 NSNumber
的子类。核心数据将数字作为NSNumber
的实例返回。你得到了奇怪的NSInteger
值,因为它指向一个NSNumber
类型的对象,但是试图打印它就像它只是一个整数一样。
您需要将NSInteger
替换为NSNumber
以避免任何问题。您还可以使用intValue
上的NSNumber
方法取回NSInteger
:
NSNumber *objTaskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];
NSInteger *intTaskId = [objTaskId intValue];
如果你想进行比较(大于,等于,小于)或算术(你不能将NSNumber
添加到另一个NSNumber
或{},你需要这样做{1}}为原始类型,如NSNumber
或int
)。