这是代码:
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
以避免任何其他问题?
最佳答案
NSNumber
是一个对象,而 NSInteger
只是原始(非对象)类型的 typedef
(如 int
)。 NSInteger
不是 NSNumber
的子类。 Core Data 返回数字作为 NSNumber
的实例。您得到了奇怪的 NSInteger
值,因为它指向类型为 NSNumber
的对象,但试图打印它,就好像它只是一个整数一样。
您需要将 NSInteger
替换为 NSNumber
以避免任何问题。您还可以在 NSNumber
上使用 intValue
方法来取回 NSInteger
:
NSNumber *objTaskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];
NSInteger *intTaskId = [objTaskId intValue];
如果你想做比较(大于、等于、小于)或算术(你不能将一个 NSNumber
添加到另一个 NSNumber
或 NSNumber
到原始类型,如 int
或 float
)。
关于objective-c - KVC——关于数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11070590/