在 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'

设置 NSManagedObject 的 Bool 属性会引发“iOS 10 中未捕获的异常”

将 NSManagedObject 转换为子类类型的问题