-1

我正在使用一组位置(在线存储),它们具有 LocationID、lat、long、name、PinNumber 和 UserId。

步骤:我加载所选用户的完整位置数组我使用该数组创建引脚(使用名称、位置等的简单 for 循环)

可悲的是, MKPointAnnotation 只能有一个名称和坐标,这就是我的问题出现的地方。

当我的用户选择一个 pin 并使用注释时(如果我错了,请纠正我,这是所选 pin 内的小信息按钮),他被重定向到另一个页面,他可以在其中编辑该位置,但我找不到它在数据库中,因为我无法获取该位置的 ID

我尝试NSInteger index = [mapView.annotations indexOfObject:view.annotation];在我的位置数组中使用并检查该索引,但它就是不匹配。

我该怎么做才能让我的对象从那个别针上拿回来?或者任何真正完成工作的解决方法。

4

2 回答 2

1

您可以继承 MKAnnotation 并将您的对象 ID 添加到其中,如下所示:

在 CustomAnnotation.h 中,

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface CustomAnnotation : NSObject <MKAnnotation>

@property (nonatomic, retain) NSString *title;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, retain) NSNumber *objectID;

- (id)initWithTitle:(NSString *)newTitle id:(NSNumber *)objectID location:(CLLocationCoordinate2D)location;
- (MKAnnotationView *)annotationView;
@end

在 CustomAnnotation.m 中,

#import "CustomAnnotation.h"

@implementation CustomAnnotation

- (id)initWithTitle:(NSString *)newTitle id:(NSNumber *)objectID location:(CLLocationCoordinate2D)location
{
    self = [super init];
    if(self)
    {
        // Initialization code
        _title = newTitle;
        _coordinate = location;
        _objectID = objectID;
    }
    return self;
}

- (MKAnnotationView *)annotationView
{
    MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:@"MyCustomAnnotation"];

    // Your settings
    annotationView.draggable = NO;
    annotationView.enabled = YES;

    return annotationView;
}
@end

此外,在 mapView:viewForAnnotation 中:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    // Customise all annotations except MKUserLocation
    if([annotation isKindOfClass:[CustomAnnotation class]])
    {
        CustomAnnotation *point = (CustomAnnotation *)annotation;
        MKAnnotationView *pointView = (MKAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"MyCustomAnnotation"];

        if(pointView == nil)
            pointView = point.annotationView;
        else
            pointView.annotation = annotation;

        ...
        // do something with point.objectID

        return pointView;
    }
    else
        return nil;
}
于 2014-07-28T14:40:22.980 回答
0

您可以继承 MKPointAnnotation 并使用您的对象创建一个新属性

@interface CustomPointAnnotation : MKPointAnnotation

@property (nonatomic, strong) CustomObject* object;

@end

现在,每当您处理 <MKAnnotation> 时,将其转换为 CustomPointAnnotation* 并设置/获取对象属性。

于 2014-07-28T14:20:45.643 回答