我对 Objective-C 和 iOS 比较陌生,所以我在使用NSManagedObject
子类作为MKAnnotation
. 我做了一个获取请求来获取所有“地点”(NSManagedObject
子类和MKAnnotation
),所以我可以填充地图。
viewDidLoad
一切都很好,可以在以下位置获取它们MapController
:
- (void)viewDidLoad
{
[super viewDidLoad];
DatabaseHelper *db = [DatabaseHelper newDatabaseHelper]; // does all the fetch requests ahead...
NSArray *places = [[db getPlacesForDeck:@"PlacesDeck"] allObjects];
/*
[places enumerateObjectsUsingBlock:^(Place *place, NSUInteger i, BOOL *stop) {
NSLog(@"Place Number: %d", i);
NSLog(@"Place : %@", place.name);
NSLog(@"Place latitude: %@", place.latitude); ALL FINE HERE
NSLog(@"Place longitude: %@", place.longitude);
}];
*/
self.annotations = places;
[self.mapView addAnnotations:places];
}
NSLog 报告很好,但是随着地图的绘制,注释标题和坐标默认为 null 和 (0,0)。
- (NSString *) title{
return self.name; //name is an attribute from NSManagedObject subclass.
}
- (CLLocationCoordinate2D) coordinate{
CLLocationCoordinate2D coord;
coord.latitude = [self.latitude doubleValue]; // Longitude and latitude
coord.longitude = [self.longitude doubleValue]; // also dynamic attributes.
return coord;
}
我的猜测是,当我传递 'places' 数组时,我会以某种方式取消对每个地方的引用。但是我在某处读到NSArray
强烈引用这些对象,所以我不太确定我是如何“丢失”数据的。关于发生了什么的任何提示?还是我采取了错误的方法?