2013-04-28 2 views
0

У меня возникла проблема с приложением карты iOS. Я думаю, что это происходит из одновременного доступа к тем же данным в одно и то же время. Но ошибка явно не ясна.[iOS] [MagicalRecord] [CoreData] Обработка данных

Что делает приложение:

  • добавить запись местоположения, когда пользователь обновляет свое местоположение. (LocationManager)
  • отображения местоположения на карте (MapViewController)

Если я не добавить любое место, я не получаю сообщение об ошибке. Если добавить одно и то же время отображения карты (которые используют запись местоположения от MagicalRecord) Я получил эту ошибку или плохой доступ:

error: * Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan -2.60432e+07]'

Вот запись экрана ошибки: Screen recording

Я сделал тест с выполнением всех манипуляций с данными на основной резьбе, я до сих пор не могу понять ошибку

Если кто-то может мне помочь, он сэкономит мой день.

Спасибо.

+0

им жаль, что я не следую. пожалуйста, повторите то, что вы ХОТИТЕ и что у вас есть –

+0

Ошибка в том, что вы пытаетесь установить фрейм или позицию или что-то с помощью NAN (не число). – Iducool

ответ

0

Очень маловероятно, что непосредственной причиной проблемы является совпадение параллелизма, так как все ваши связанные с ui методы должны быть вызваны в основной поток, хотя это может быть основной причиной. Теперь, как говорится в ошибке, происходит то, что координата позиции CALayer установлена ​​в NaN в какой-то момент. Обычно это происходит из-за деления на ноль. Чтобы узнать, где это происходит, включите контрольные точки исключения. Когда вы видите, какой слой бросает исключение, увидеть, если его x или y является NaN, и если он есть, увидеть, где вы установите его, чтобы быть NaN

+0

Я проверил все значения, используемые для отображения товаров на карте, также использовал точку останова. –

0

LocationManager:

- (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]; 

}

MapViewController:

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

}

+0

Это должно быть редактирование вашего вопроса, а не ответ. (Это не форум.) –

Смежные вопросы