Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在核心数据中存储纬度/经度_Ios_Objective C_Core Data - Fatal编程技术网

Ios 在核心数据中存储纬度/经度

Ios 在核心数据中存储纬度/经度,ios,objective-c,core-data,Ios,Objective C,Core Data,我有一个NSManagedObject,它有两个纬度和经度的双重属性。创建NSManagedObject子类时,我选中使用标量值复选框。.h文件将属性声明为: @property (nonatomic) double latitude; @property (nonatomic) double longitude; 我正在从web服务检索纬度和经度值,并在本地使用以下内容设置它们: double tempLatitude = [[location objectForKey:@"lat"] do

我有一个NSManagedObject,它有两个纬度和经度的双重属性。创建NSManagedObject子类时,我选中使用标量值复选框。.h文件将属性声明为:

@property (nonatomic) double latitude;
@property (nonatomic) double longitude;
我正在从web服务检索纬度和经度值,并在本地使用以下内容设置它们:

double tempLatitude = [[location objectForKey:@"lat"] doubleValue];
double tempLongitude = [[location objectForKey:@"lng"] doubleValue];
但是,当我尝试使用NSManagedObject子类中动态创建的setter时,应用程序会因EXC_BAD_访问而崩溃

[newPlace setLatitude:tempLatitude];
我还尝试将tempLatitude和templantude转换为NSNumber值,但setter告诉我,我正在将“NSNumber*\uu strong”发送到不兼容类型为“double”的参数

如何正确转换正在检索的值以存储在核心数据对象中?或者在我的NSManagedObject子类中创建某种自定义setter

[newPlace setLatitude:tempLatitude];
如果这是一个重复的问题,我道歉。我已经搜索了很多次,大多数答案都停留在商店的lat/long-as-double上,没有详细说明

编辑 要求提供更多代码。我将它分散在几个文件中,但我将一个简单的请求整合到AppDelegate中只是为了进行测试,当我尝试运行此块时,它仍然会因EXC_BAD_访问而崩溃

注意:我现在只是想在内存中保存一个NSManagedObject。这个上下文并没有指向数据库

这是我的托管对象头文件:

地点

地点

下面是一组设置上下文、创建子类实例并尝试向其写入双值的代码:

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

NSPersistentStoreCoordinator *memPsc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

NSError *error = nil;

if (![memPsc addPersistentStoreWithType:NSInMemoryStoreType
                          configuration:nil
                                    URL:nil
                                options:nil
                                  error:&error])
{
    [NSException raise:@"Open failed!" format:@"Reason: %@", [error localizedDescription]];
}

NSManagedObjectContext *memContext = [[NSManagedObjectContext alloc] init];

[memContext setPersistentStoreCoordinator:memPsc];

Place *place = [NSEntityDescription insertNewObjectForEntityForName:@"Place" inManagedObjectContext:memContext];

double tempLatitude = [@"1.23" doubleValue];
double tempLongitude = [@"3.456" doubleValue];

[place setLatitude:tempLatitude];  // BLOWS UP HERE: EXC_BAD_ACCESS
[place setLongitude:tempLongitude];

最后,我只是将NSManagedObject子类的属性更改为NSNumber,并将NSNumber值分配给对象。这似乎奏效了。我希望我知道正确的方法,如果不是的话。

尝试将其转换为NSNUMBER,我就是这么做的。见上文。一旦我将其作为NSNumber,setter就会说它是一种不兼容的数据类型。如果头文件声明为Double,那么为什么要对其调用doubleValue?[newPlace setLatitude:someDouble]或newPlace.latitude=someDouble,如果选择了使用标量值,则应该可以工作。无需将双精度转换为NSNumber。你能提供更多关于坠机的信息吗?
    NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts"     inManagedObjectContext:context];

NSNumber *longitudesNumber = [NSNumber numberWithDouble:longitudes];
NSNumber *latitudesNumber = [NSNumber numberWithDouble:latitudes];
[newDevice setValue: longitudesNumber forKey:@"longitude"];
[newDevice setValue: latitudesNumber   forKey:@"latitude"];
    NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts"     inManagedObjectContext:context];

NSNumber *longitudesNumber = [NSNumber numberWithDouble:longitudes];
NSNumber *latitudesNumber = [NSNumber numberWithDouble:latitudes];
[newDevice setValue: longitudesNumber forKey:@"longitude"];
[newDevice setValue: latitudesNumber   forKey:@"latitude"];