在 NSManagedObject 上设置双属性的值
Posted
技术标签:
【中文标题】在 NSManagedObject 上设置双属性的值【英文标题】:Setting the value of a double attribute on NSManagedObject 【发布时间】:2012-03-27 08:50:49 【问题描述】:我正在尝试在我的应用程序上实现地图功能。但是,我希望将纬度和经度从存储在核心数据中的对象传递到地图中。但是,当我启动我的应用程序时,我在设置对象的初始值时遇到了问题。到目前为止,我已经尝试了 2 种不同的方法,我收到的每个错误都是“将 'double 发送到不兼容类型 'id' 的参数。任何帮助将不胜感激。
NSManagedObject *room = [NSEntityDescription insertNewObjectForEntityForName:@"Room" inManagedObjectContext:context];
double myLatitude = -1.228087;
double myLongitude = 52.764397;
[room setValue:@"H001" forKey:@"code"];
[room setValue:@"This is a description" forKey:@"roomDescription"];
[room setValue:myLatitude forKey:@"longitude"];
[room setValue:myLatitude forKey:@"latitude"];
【问题讨论】:
【参考方案1】:NSManagedObject
属性必须是对象,但double
是原始 C 类型。解决方案是将双打包装在NSNumber
:
[room setValue:[NSNumber numberWithDouble:myLongitude] forKey:@"longitude"];
[room setValue:[NSNumber numberWithDouble:myLatitude] forKey:@"latitude"];
【讨论】:
非常感谢,我知道这与他们类似,但不知道如何设置它以使用双精度。【参考方案2】:你应该把你的 double 包装成一个 NSNumber:
[NSNumber numberWithDouble:myDouble]
NSManagedObject setValue:forKey: 需要一个 id 作为它的值。 double 是原始的。
【讨论】:
【参考方案3】:This answer 告诉你如何在 Core Data 中存储浮点数。这是双份的
[room setValue:[NSNumber numberWithDouble:myLatitude] forKey:@"latitude"];
【讨论】:
以上是关于在 NSManagedObject 上设置双属性的值的主要内容,如果未能解决你的问题,请参考以下文章
Swift:CoreData NSManagedObject 的自定义设置器
将 NSNumber 设置为 NSManagedObject 属性
KVO 方法在 NSManagedObject 属性上触发两次
NSManagedObject 的设置属性阻止了核心数据中的 iPad UI'