0

iOS マップ アプリケーションで問題が発生しました。同時に同じデータへの同時アクセスから来ていると思います。しかし、エラーは実際には明示的ではありません。

アプリケーションは何をしますか:

  • ユーザーが自分の場所を更新したときに場所レコードを追加します。(ロケーションマネージャー)
  • 地図上に位置を表示 ( MapViewController )

場所を追加しない場合、エラーは発生しません。マップを追加し、同時にマップ (MagicalRecord のロケーション レコードを使用) を表示すると、次のエラーまたは不正なアクセスが発生しました。

エラー: *キャッチされない例外 'CALayerInvalidGeometry' が原因でアプリを終了しています。理由: 'CALayer の位置に NaN が含まれています: [nan -2.60432e+07]'

バグの画面記録は次のとおりです。

メインスレッドですべてのデータ操作を実行してテストしましたが、まだエラーがわかりません

誰かが私を助けることができれば、彼は私の日を救うでしょう。

ありがとう。

4

2 に答える 2

0

根本的な原因である可能性はありますが、UI 関連のメソッドはすべてメイン スレッドで呼び出す必要があるため、問題の直接の原因が同時実行性の誤った処理である可能性はほとんどありません。さて、エラーが言うように、何が起こるかというと、ある時点でCALayer位置座標が設定さNaNれます。これは通常、ゼロ除算が原因で発生します。それがどこで発生するかを調べるには、例外ブレークポイントを有効にします。どのレイヤーが例外をスローしているかがわかったら、それがxまたはyであるかどうNaNかを確認し、そうである場合は、どこに設定したかを確認しますNaN

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

}

MapViewController:

- (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 に答える