annotationView委托和MKAnnotation

时间:2011-02-01 23:27:47

标签: iphone objective-c mkannotation

所以我按如下方式创建了一个类X:

@interface X : NSObject <MKAnnotation> {
    CLLocationCoordinate2D  coordinate;
    NSString * title;
    NSString * subtitle;
    UIImage * image;
    NSInteger * tag;
}

@property (nonatomic, readonly) CLLocationCoordinate2D  coordinate;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSString * subtitle;
@property (nonatomic, retain) UIImage * image;
@property (nonatomic, readwrite) NSInteger * tag;

@end

内部:

  • (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

我希望能够访问X拥有的标记属性。这怎么可能? 我能做[控制标签]吗?这假设是如何工作的?

1 个答案:

答案 0 :(得分:1)

对于第二部分,警告的原因是您将纯整数分配给NSInteger指针。 NSInteger的类型为intlong

所以你正在做(错误地):

NSInteger * tag = 2;

修改

这是你可以使用NSInteger的方法:

NSInteger myi = 42;
NSLog(@"int: %d", myi);

NSInteger * i = &myi;    // i is a pointer to integer here
*i = 43;                 // dereference the pointer to change 
                         // the value at that address in memory
NSLog(@"int: %d", myi);

鉴于上述情况,您正在尝试:

NSInteger * i = &myi;
i = 2;                  // INCORRECT: i is an pointer to integer

tag声明为NSInteger而不是NSInteger*并在属性中使用assign(我会给你一些确切的代码,但我在linux atm ...)

END OF EDIT

对于第一部分,我不确定X的对象是如何传递给您的方法的,但如果[yourobject tag]方法是tag,那么您应该能够X该方法用于从对象MKAnnotation获取数据的接口的一部分。

我的意思是tag协议没有X *anX = (X*)self.annotation;属性,因此您必须将对象类型转换为您的对象类型,例如annotation,或[anX tag]对象来自的任何地方,您应该能够访问代码X - 如果这是您的regionDidChangeAnimated对象

我发现了example code in Apple docs that uses custom annotation

在示例中,注释在视图上设置。

绘制视图时,它使用来自实现注释协议的对象的数据。在访问值之前,将对象类型化为实际对象(请参阅视图的绘制方法)。

您可以在控制器中看到视图中{{1}}中新注释的设置方式。