KVC - 关于数据类型

时间:2012-06-17 10:22:24

标签: objective-c ios

这是代码:

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以避免任何其他问题?

1 个答案:

答案 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}}为原始类型,如NSNumberint)。