0

此错误仅出现在 Xcode 5.0 版中

在我在 Xcode版本 4.6.2中创建我的应用程序之前,它对我来说工作得很好,但是我在 Xcode版本 5.0中遇到了这个错误

我创建了自定义注释类来生成我更新的位置和地址。

我的代码是:

注释视图.h

#import <MapKit/MapKit.h>

@interface AnnotationView : MKPlacemark

@property (nonatomic, readwrite, assign) CLLocationCoordinate2D coordinate;

@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *subtitle;

@end

注释视图.m

#import "AnnotationView.h"

@implementation AnnotationView

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate addressDictionary:(NSDictionary *)addressDictionary
{
    if ((self = [super initWithCoordinate:coordinate addressDictionary:addressDictionary]))
    {
        self.coordinate = coordinate;
    }
    return self;
}

@end

以上是我的自定义类。我在我的 MapView 中使用了它。

CLLocationCoordinate2D theCoordinate ;
    theCoordinate.latitude = [self.latitude doubleValue];
    theCoordinate.longitude = [self.longitude doubleValue];

    AnnotationView *annotation = [[AnnotationView alloc] initWithCoordinate:theCoordinate addressDictionary:nil] ;    
    annotation.title = self.businessName;
    annotation.subtitle = self.businessAddress;
    [self.mapView addAnnotation:annotation];

    MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:MKCoordinateRegionMakeWithDistance(theCoordinate, 8000, 8000)];
    [self.mapView setRegion:adjustedRegion animated:YES];

请建议我在哪里犯错。

4

1 回答 1

4

你的超类AnnotationView,即MKPlacemark,已经存储了coordinate- 请注意你将它传递给super initWithCoordinate:方法 - 所以你不需要将 存储coordinate在你的子类中。让超类处理它。

换句话说,你应该从你的AnnotationView类中删除这一行:

self.coordinate = coordinate;

如果您需要coordinate从您的 访问该属性AnnotationView,只需使用[super coordinate].

小心用你自己的同名属性覆盖超类的属性——一般来说,你不想这样做!

至于为什么你在 Xcode 5 中遇到问题,而之前它还可以:这可能是因为不同版本的编译器对代码的解释略有不同。您的代码总是有问题,只是编译器现在注意到它有问题。

于 2013-10-11T11:08:12.127 回答