【发布时间】:2014-03-24 21:48:29
【问题描述】:
我发现人们在 Core Data 模型中使用整数类型存在一些问题,但随后尝试在代码中使用整数而不将复选框设置为使用标量。但是,我实际上正在这样做。
- 在实体上创建一个整数 64 属性
- 从该实体创建一个 NSManagedObject 子类
- 选中“对原始数据类型使用标量属性”框。
这会生成:
@interface State : NSManagedObject
@property (nonatomic) int64_t serverId;
@end
但是,然后,在运行时,我会使用以下代码得到 EXC_BAD_ACCESS 错误:
int64_t someValue = 313;
State *state = ... // standard [NSEntityDescription insert code
state.serverId = someValue;
其中 'state' 是 NSManagedObject 子类,serverId 是 Integer 64 属性。 但是,以下代码有效:
state.serverId = [NSNumber numberFromInt:someValue];
但是,由于 serverId 实际上被声明为 int64_t,这会导致警告。而且,实际上尝试访问该值会给出可能是指针地址的东西(尽管 %@ 看起来像我所期望的那样)。
所以,我想我的问题是,Core Data 中的什么东西卡在了我的 int64_t 是 NSNumber 上?查看模型和 NSAttributeDescription,它是一个 NSInteger64AttributeType。
我认为可能与此有关的事情:
- 忘记选中该框并重新生成类
- 更新架构并迁移
首先,这似乎是一种常见情况,我已经尝试过,但正如预期的那样,我无法重现我的问题。对于第二种情况,我删除了我的模型文件并重新创建了所有内容,删除了我的 DerivedData 目录。
【问题讨论】:
标签: objective-c core-data