【问题标题】:ARC semantic issue no visible @interface for 'MKPinAnnotationView' declares the selector 'initWithAnnotation:reuseIdentifier:'ARC 语义问题没有可见的“MKPinAnnotationView”@interface 声明选择器“initWithAnnotation:reuseIdentifier:”
【发布时间】:2014-11-17 10:32:28
【问题描述】:

这是我尝试为地图上的图钉设置图钉注释视图的代码。我正在使用 MKPinAnnotationView 上已有的默认引脚。

#import "ViewController.h"
#import "AKNeutralPin.h" // NSObject <MKAnnotation> class

@interface ViewController () <MKMapViewDelegate>
...

@implementation

...

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
if ([annotation isKindOfClass:[AKNeutralPin class]]) {
         MKPinAnnotationView *neutralPinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"neutral"];
         neutralPinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"neutral"];
         neutralPinView.pinColor = MKPinAnnotationColorPurple;
         neutralPinView.canShowCallout = YES;
         return neutralPinView;
}

return nil;
}

问题是代码在模拟器上运行得很好,但在设备上却不行。 显示错误:

ARC semantic issue no visible @interface for 'MKPinAnnotationView' declares the selector 'initWithAnnotation:reuseIdentifier:.

我检查了 AKNeutralPin.h 和 .m 的文件路径。它们位于正确的文件路径中。不知道我在这里缺少什么。非常感谢任何帮助!

更新:我已将代码导出到 .ipa 文件并安装在设备上。它运作良好。所以我认为问题不在于代码,而在于我对构建的架构所做的一些设置更改不知道。

【问题讨论】:

  • @OnikIV 的答案与您的“ARC 语义”错误无关,但 确实 指出了所示代码中的另一个缺陷(调用了 dequeue,但从未使用过结果因为那样它会立即分配一个新的)。对于“ARC 语义”错误,您能否显示文件使用的 #import@class 行?您是否有您的自己的 类名为MKPinAnnotationView?您是否尝试过清理和重建项目?
  • 我只有注解类,没有注解视图类。我已经用导入类更新了问题。

标签: ios objective-c automatic-ref-counting xcode6 mkannotationview


【解决方案1】:

改成这样:

if ([annotation isKindOfClass:[AKNeutralPin class]]) {
     MKPinAnnotationView *neutralPinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"neutral"];
     if(!neutralPinView){
     neutralPinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"neutral"];
    }
     neutralPinView.pinColor = MKPinAnnotationColorPurple;
     neutralPinView.canShowCallout = YES;
     return neutralPinView;
}

【讨论】:

  • 我尝试了代码,但在设备上运行时仍然出现相同的错误消息。在模拟器上运行良好。
猜你喜欢
  • 1970-01-01
  • 2022-10-17
  • 2013-05-04
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
相关资源
最近更新 更多