【问题标题】:Annotation with NSManagedObject使用 NSManagedObject 进行注释
【发布时间】:2012-10-29 20:02:15
【问题描述】:

我对 Objective-C 和 iOS 比较陌生,所以我在使用 NSManagedObject 子类作为 MKAnnotation 时遇到了问题。我执行获取请求以获取所有“地点”(NSManagedObject 子类和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 强烈引用了这些对象,所以我不太确定我是如何“丢失”数据的。关于发生了什么的任何提示?还是我采取了错误的方法?

【问题讨论】:

  • 骗我,解决了。似乎因为我没有保留引用的 DatabaseHelper,它具有 NSManagedObjectContext 实例,因此 NSManagedObject 没有上下文并且正在丢失。只需要创建一个引用 DatabaseHelper 的 ivar 以使其保持活动状态。

标签: objective-c core-data mapkit


【解决方案1】:

坐标访问器更简单如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多