Objective c 使用NSManagedObject进行注释

Objective c 使用NSManagedObject进行注释,objective-c,core-data,mapkit,Objective C,Core Data,Mapkit,我对objective-C和iOS比较陌生,所以在使用NSManagedObject子类作为MKAnnotation时遇到了一个问题。我执行一个fetch请求来获取所有的“位置”(NSManagedObject的subclass和MKAnnotation),这样我就可以填充地图了 在MapController上的viewDidLoad上获取它们的所有细节: - (void)viewDidLoad { [super viewDidLoad]; DatabaseHelper *db

我对objective-C和iOS比较陌生,所以在使用
NSManagedObject
子类作为
MKAnnotation
时遇到了一个问题。我执行一个fetch请求来获取所有的“位置”(NSManagedObject的
subclass和
MKAnnotation
),这样我就可以填充地图了

MapController
上的
viewDidLoad
上获取它们的所有细节:

- (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
强烈引用了这些对象,所以我不太确定我是如何“丢失”数据的。有关于发生什么事的提示吗?还是我采取了错误的方法?

坐标存取器更简单,如下所示:

- (CLLocationCoordinate2D)coordinate{
    return CLLocationCoordinate2DMake(self.latitude, self.longitude);
}

让我哑口无言,解决了它。似乎因为我没有引用DatabaseHelper,它有NSManagedObjectContext实例,所以NSManagedObject没有上下文,因此正在丢失。只需要创建一个带有对DatabaseHelper的引用的ivar,以使其保持活动状态。