注釈付きの MKMapView を使用しています。
これは私のコードです。
-(void) addAnnotationForCountry {
[self reloadSiteList];
[_compoundDetail.sidebar setUserInteractionEnabled:NO];
[_compoundDetail.detailWindow setUserInteractionEnabled:NO];
if (_diseaseTable.userInteractionEnabled) {
[_diseaseTable setUserInteractionEnabled:NO];
_sitecount = 0;
_radius = 0;
NSMutableArray *site = [[NSMutableArray alloc]init];
site = [_siteList copy];
for (Site *s in site) {
if ([s.country isEqualToString:selectedCountry.country] && _sitecount < 20) {
MKPointAnnotation *annot = [[MKPointAnnotation alloc] init];
annot.title = [s city];
annot.coordinate = CLLocationCoordinate2DMake(s.lat, s.log);
[_mapView addAnnotation:annot];
_sitecount++;
}
}
if (!_sitecount) {
[self showNoSiteAvailbleView];
_radius = 500;
}
if (_sitecount && _radius < 100) {
_radius = 100;
}
MKCoordinateSpan span;
span.latitudeDelta = 100;
span.longitudeDelta = 100;
MKCoordinateRegion region;
region.span = span;
region.center = CLLocationCoordinate2DMake(selectedCountry.lat, selectedCountry.log);
[_mapView setRegion:region animated:YES];
}
}
これが行われていることです。
- ユーザーはリストから国を選択します。
- データベースから特定の国の座標を読み取ります。
- 選択した国の座標に基づいて、データベースからレコード (サイトの座標) を取得します。
- Map の各レコードに注釈を追加します。注:地図に表示する注釈は約 250 個あります
このコードは機能し、最初の読み込みで注釈を正しく表示しますが、別のサブビューに切り替えてこのサブビューに戻ると、次のメッセージでクラッシュします。
Terminating app due to uncaught exception of class '_NSZombie_NSException'
libc++abi.dylib: terminate called throwing an exception
値を変更して20個の注釈のみを表示しようとすると、機能し、クラッシュは発生しません。
問題は何ですか?これは非常に長い間私を悩ませています。
PS: Instruments を使用したメモリ管理についてはわかりません。私は試しましたが、今まで結果はありませんでした。
どんな種類の助けも大歓迎です。
ありがとう
アップデート
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
MKAnnotationView *mapAnnotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
mapAnnotationView.image = [UIImage imageNamed:@"map_icon.png"];
return mapAnnotationView;
}
-(void)reloadSiteList {
_siteList = [[NSMutableArray alloc]init];
_trialRefList = [[NSMutableArray alloc] init];
_trialRefList = [[PipelineDatabase initializeDatabase] getTrialReflistForDisease:_selectedDisease];
for (NSString *ref in _trialRefList) {
[_siteList addObjectsFromArray:[[PipelineDatabase initializeDatabase] getSitesByRef:ref]];
}
}