尝试将纬度和经度保存到核心数据会导致访问错误

Posted

技术标签:

【中文标题】尝试将纬度和经度保存到核心数据会导致访问错误【英文标题】:Trying to save latitude and longitude to Core data causes bad access 【发布时间】:2013-06-25 11:47:44 【问题描述】:

我试图在核心数据中保存纬度和经度,但导致访问错误。 这是代码:

编辑:

Favourites *fav = (Favourites *)[NSEntityDescription insertNewObjectForEntityForName:@"Favourites" inManagedObjectContext:_managedObjectContext];

NSString *str = [NSString stringWithFormat:@"%@",point.title];
int index =[sharedRequest.name indexOfObject:str];
[fav setPlaceName:str];

double lat = [[sharedRequest.latArray objectAtIndex:index] doubleValue];
double lng = [[sharedRequest.lngArray objectAtIndex:index] doubleValue];

[fav setPlaceLatitude:lat];
[fav setPlaceLongitude:lng];

我不知道为什么会这样。任何帮助都将不胜感激。

P.S lat 和 lng 在我打印时很有价值

【问题讨论】:

你能显示完整的错误信息吗?另外,你在使用 ARC 吗? 是的,我使用的是 ARC,它不会在控制台上打印任何内容,只是通知我访问不正确 告诉我们对象是什么(sharedRequest,fav)?它在哪一行崩溃? sharedRequest 是一个单例类,负责在后端获取数据,fav 是 CoreData 类的对象 @woz 是的 EXC_BAD_ACCESS 【参考方案1】:

您需要将纬度和经度值保存为 NSNumber 而不是双精度值。

NSNumber *latitude = [NSNumber numberWithDouble:lat];
[fav setPlaceLatitude:latitude];

更新

对于您的收藏夹实体,placeLatitude 属性应为双精度。但是,在使用NSManagedObject 子类Favorites 时,需要使用NSNumber 来设置placeLatitude。 Core Data 使用 NSNumber 来存储 int、float、double、bool 等原语。

让 Xcode 生成您的收藏夹类。在左侧窗格中选择 Core Data 数据模型,然后选择 Xcode -> Editor -> Create NSManagedObject Subclass。

【讨论】:

我已经将dataType设置为double,所以我不能使用NSNumber 必须使用 NSNumber。否则会崩溃。就像现在一样。 那么我在核心数据模型中使用什么数据类型 双倍是你想要的。你只需要做出我建议的改变。查看您的 NSManagedObject 收藏夹的标题,您会看到 placeLatitude 是一个 NSNumber。 我尝试使用你的代码,但它给了我一个错误Sending NSNumber*_strong' to parameter of incompatible type 'double'

以上是关于尝试将纬度和经度保存到核心数据会导致访问错误的主要内容,如果未能解决你的问题,请参考以下文章

在地图上保存纬度和经度点击到 SQLite 数据库不起作用

我正在尝试将纬度和经度保存到猫鼬模型,但我无法存储它们

将经纬度保存在对象中

如何从房间数据库中的位置对象中保存和检索纬度和经度

为啥 CoreData 不保存任何东西?

两次获取相同的纬度,经度值,比较并保存到db