gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:34:28 26 4
gpt4 key购买 nike

这是代码:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com