objective-c - KVC——关于数据类型

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

最佳答案

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 添加到另一个 NSNumberNSNumber 到原始类型,如 intfloat)。

关于objective-c - KVC——关于数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11070590/

相关文章:

ios - UIView 动画 block 问题

Objective-C:performSelector:与 forwardInvocation:

ios - 字符串?不能转换为 'StringLiteralConvertible' & ?!在 swift

objective-c - NSArrayController 在多个 NIB 中访问单例 NSMutableArray

objective-c - 在 C 数组中存储 NSObject 指针数组

ios - 切换 CALayer 时如何设置动画

ios - 如何转义正则表达式字符串

ios - 如果没有输出缓冲区,AudioUnit 会产生噪音

objective-c - 在运行时向 iOS 上的 Objective-c 中的对象发送动态消息

ios - UITapGestureRecognizer : "Unrecognized selector sent to instance"