0

我正在使用 CoreData,并且我有一个 Thing 类型的 NSManagedObject。当我设置断点时,我可以控制台“po aThing”并显示存储的数据。

{
    thingID = 5181c56063ab02c4d1000016;
    distance = "2.075121";
    lat = "37.815834";
    lng = "-122.406417";
}

但是,如果我尝试访问 lat 或 lng(它们在 Core Data 中是双精度的)。我得到“nan”返回。如果我尝试“po aThing.lat”,控制台会显示 nan。

如果我尝试“po aThing.thingID”,控制台会显示 5181c56063ab02c4d1000016。

如果我尝试像 newThing.lat = aThing.lat 那样分配,那么 newThing.lat 就会变成 nan。

我猜它与数据有关吗?

更新:

这是我的 .h 的属性

@property (nonatomic) double lat;
@property (nonatomic) double lng;

这是我使用它们的方式

coordinate.latitude = thing.lat;
coordinate.longitude = thing.lng;

这是我如何改变它们

@property (nonatomic) double *lat;
@property (nonatomic) double *lng;

以及我现在如何使用它们,它似乎有效

coordinate.latitude = *(thing.lat);
coordinate.longitude = *(thing.lng);
4

1 回答 1

0

如上面评论中所说,从“double”切换到“NSNumber”,并将double转换为NSNumber,如[NSNumber numberWithDouble:someDouble]

或者....另一种(可能是更好的)方法(如在苹果文档中找到的)是您可以将“lat”保持为双精度,但在幕后,您可以制作自己的 getter/setter 并将双精度转换为 NSNumber .

some.h
@property long lat;

some.m
@interface MyManagedObject (PrimitiveAccessors)
@property (nonatomic) NSNumber primitiveLat;
@end


- (long)lat {

    [self willAccessValueForKey:@"lat"];
    NSNumber *tmpValue = [self primitiveLat];
    [self didAccessValueForKey:@"lat"];
    return (tmpValue!=nil) ? [tmpValue longValue] : 0.0; // Or a suitable representation for nil.
}

- (void)setLat:(long)value {

    NSNumber *temp = @(value);
    [self willChangeValueForKey:@"lat"];
    [self setPrimitiveLat:temp];
    [self didChangeValueForKey:@"lat"];
}
于 2013-05-02T19:46:40.840 回答