【问题标题】:CoreData with MapKit unrecognized selector带有 MapKit 无法识别选择器的 CoreData
【发布时间】:2011-09-05 06:12:23
【问题描述】:

我收到以下错误

2011-09-05 08:08:43.506 CaveConditions[7203:11903] -[NSManagedObject coordinate]: unrecognized selector sent to instance 0x7471910
2011-09-05 08:08:43.507 CaveConditions[7203:11903] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObject coordinate]: unrecognized selector sent to instance 0x7471910'

这就是我所说的

NSFetchRequest *request = [[NSFetchRequest alloc] init];
    request.entity = [NSEntityDescription entityForName:@"Cave" inManagedObjectContext:self.context];
    request.predicate = [NSPredicate predicateWithFormat:@"(latitude > 0) AND (longitude > 0)"];

    [self.mapView addAnnotations:[self.context executeFetchRequest:request error:NULL]];

它在 addAnnotations 行崩溃

在我的 Cave.h 中(它作为 MKAnnotation 委托)

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

在我的 Cave.m

- (CLLocationCoordinate2D)coordinate
{
    CLLocationCoordinate2D location;
    location.latitude = [self.latitude doubleValue];
    location.longitude = [self.longitude doubleValue];
    return location;
}

我错过了什么吗?

【问题讨论】:

    标签: iphone core-data unrecognized-selector


    【解决方案1】:

    错误提示Cave类未注册为数据模型中实体Cave的类。当您执行 fetch 时,您会得到一个通用的 NSManagedObject 而不是 Cave 类的实例。

    检查数据模型是否有字段输入自定义 NSManagedObject 子类的名称。它可能仍设置为默认值。

    【讨论】:

    • 嗯,我不太明白你的意思,抱歉。我添加了模型部分的打印屏幕。我需要在那里填写什么?它有什么变化?因为它在 tableview 中运行良好。
    • 标记为 class 的字段。它当前具有 NSManagedObject 的默认值。您需要将其更改为 Cave
    • 这非常有效。我需要用我所有的实体来做吗?它有什么用?
    • 实体和类是分开的。实体描述数据模型,而类描述哪些对象将实例化实际数据。通用 NSManagedObject 类可以使用关联存储实例化任何实体,但您不会获得自定义的属性名称或访问器。如果需要,您需要创建一个自定义 NSManagedObject 子类,在本例中为 Cave。您确实需要一个自定义子类,因为您需要实现 MKAnnotation 协议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2020-08-17
    • 2018-01-22
    • 1970-01-01
    相关资源
    最近更新 更多