0

我遇到了 iOS 地图应用程序的问题。我认为它来自同时对相同数据的并发访问。但是这个错误并不是很明确。

应用程序是什么:

  • 当用户更新他的位置时添加位置记录。(位置管理器
  • 在地图上显示位置(MapViewController

如果我不添加任何位置,我不会收到任何错误。如果我添加一个并同时显示地图(使用来自 MagicalRecord 的位置记录),我会收到此错误或访问错误:

错误: *由于未捕获的异常“CALayerInvalidGeometry”而终止应用程序,原因:“CALayer 位置包含 NaN:[nan -2.60432e+07]”

这是该错误的屏幕录像:屏幕录像

我在主线程上执行所有数据操作进行了测试,我仍然无法找出错误

如果有人可以帮助我,他会拯救我的一天。

谢谢。

4

2 回答 2

0

问题的直接原因不太可能是并发错误处理,因为所有与 ui 相关的方法都应该在主线程上调用,尽管它可能是根本原因。现在,正如错误所说,发生的事情是CALayer位置坐标被设置为NaN某个点。这通常是因为除以零而发生的。要找出它发生的位置,请启用异常断点。当你看到哪个层抛出异常时,看看它是不是xor ,如果是,看看你把它设置在哪里yNaNNaN

于 2013-04-28T12:15:19.253 回答
0

位置管理器:

- (void)setupLocationRecord:(CLLocation *)location {
LocationRecord *locationRecord = [LocationRecord createEntity];

locationRecord.latitude = [NSNumber numberWithDouble:location.coordinate.latitude];
locationRecord.longitude = [NSNumber numberWithDouble:location.coordinate.longitude];
locationRecord.createdAt = [NSDate date];
locationRecord.updatedAt = [NSDate date];

[[NSManagedObjectContext defaultContext] saveNestedContexts];

//[self performSelectorInBackground:@selector(addLocation:) withObject:locationRecord];
[locationRecord debug];
[self addLocation:locationRecord];

}

地图视图控制器:

- (void)setupMap {
NSArray *array = [LocationRecord findAllSortedBy:@"idLocation" ascending:YES];
NSLog(@"%s %@", __PRETTY_FUNCTION__, array);
self.mapView.locationsRecordList = [[NSMutableArray alloc] initWithArray:array];

}

于 2013-04-28T12:46:58.560 回答