我正在使用一个Locations数组(在线存储),它们有LocationID,lat,long,name,PinNumber和UserId。
步骤:我加载所选用户的完整位置数组 我使用该数组创建引脚(一个使用名称,位置等的简单for循环)
可悲的是,MKPointAnnotation只能有一个名称和坐标,这就是我出现问题的地方。
当我的用户选择一个引脚并使用注释时(如果我错了,请更正我,这是所选引脚内的小信息按钮),他被重定向到另一个页面,在那里他可以编辑该位置,并且我无法在数据库中找到它,因为我无法获取该位置的ID 。
我尝试使用NSInteger index = [mapView.annotations indexOfObject:view.annotation];
并检查我的位置数组中的索引,但它不匹配。
如何才能从针上取回物体?或任何真正完成工作的解决方法。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
您可以继承MKPointAnnotation并使用您的对象
创建一个新属性@interface CustomPointAnnotation : MKPointAnnotation
@property (nonatomic, strong) CustomObject* object;
@end
现在每当你处理&lt; MKAnnotation&gt;时,将其转换为CustomPointAnnotation *并设置/获取对象属性。