Ios 在路线图上重新绘制标记

Ios 在路线图上重新绘制标记,ios,route-me,Ios,Route Me,在iOS 6中工作时,我似乎无法使地图视图自我更新以显示添加或删除的标记 当应用程序打开时,地图上会放置许多标记。然后,用户可以选择添加新标记和/或删除现有标记。这与在viewWillLoad中填充RMMarkerManager时使用的方法相同,我可以遍历RMMarkerManager中的标记,并查看它是否有新的标记集,但地图视图从不更新以显示它们 我尝试了[mapview setNeedsDisplay],但没有效果 显然,我遗漏了一些导致mapview更新标记显示的内容,但我还没有弄清楚是什

在iOS 6中工作时,我似乎无法使地图视图自我更新以显示添加或删除的标记

当应用程序打开时,地图上会放置许多标记。然后,用户可以选择添加新标记和/或删除现有标记。这与在viewWillLoad中填充RMMarkerManager时使用的方法相同,我可以遍历RMMarkerManager中的标记,并查看它是否有新的标记集,但地图视图从不更新以显示它们

我尝试了[mapview setNeedsDisplay],但没有效果

显然,我遗漏了一些导致mapview更新标记显示的内容,但我还没有弄清楚是什么原因,尽管在文档和帖子中进行了大量的挠头和挖掘

我将感谢任何关于我应该改变或补充什么的建议

根据要求,以下是相应的代码。我会解释它是如何工作的

在viewController的
createMarkers
方法中,通过访问sqlite数据库来创建标记。为我希望在地图上显示为标记的每条记录创建一个标记。然后我遍历标记数组,将每个标记添加到mapView的marketManager(
addMarker
方法)。方法
createMarkers
在viewController的
viewWillLoad
方法中被调用,并且工作正常:显示所有标记

使用应用程序时,用户可以选择或取消选择数据库中的记录。然后viewController接收到用户已更改选择的通知,并调用其
setMarkers
方法。mapview的marketmanager获取removeMarkers消息,然后重新创建标记数组;它现在具有反映用户选择的标记。但地图从不更新视图上的标记。用户移除的标记不会在视图上移除;不添加用户添加的标记

更新后,我可以遍历mapview.markermanager.markers,查看它现在是否包含新的标记。但它们从未显示在地图视图上

类:标记,RMMarker的子类。 仅保存有关要显示的标记的数据 标记.h

//  Marker.h

#import <Foundation/Foundation.h>
#import "Location.h"
#import "RMMarker.h"

@interface Marker : RMMarker {
    NSString *category_name;
    NSString *name;
    NSString *desc;
    NSString *address;
    NSString *png;
    int marker_id;
    float lat;
    float longi;
    CLLocationCoordinate2D node;
    float label_x_offset;
    float label_y_offset;
}
@property (nonatomic, strong) NSString *category_name;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *desc;
@property (nonatomic, retain) NSString *address;
@property (nonatomic, retain) NSString *png;
@property (nonatomic) int marker_id;
@property (nonatomic) float lat;
@property (nonatomic) float longi;
@property (nonatomic) CLLocationCoordinate2D node;
@property (nonatomic) float label_x_offset;
@property (nonatomic) float label_y_offset;

@end
视图控制器中的方法: 设置标记: 遍历NSMUtableArray标记,为该数组中的每个标记调用addMarker:方法:

- (void) setMarkers {

//  class Markers is essentially an NSMutableArray that holds instantiations of Marker - one for each marker to be displayed
//  Markers is also responsible for populating itself from a sqlite database via the createMarkers method   
    Markers *markers = [[Markers alloc] init];
    NSMutableArray *allMarkers = [markers createMarkers];

//  allMarkers contains the markers to be displayed. 

    CLLocationCoordinate2D loc;
    if ([allMarkers count] > 0) {
        for (Marker *mrkr in allMarkers) {
            loc.longitude = mrkr.longi;
            loc.latitude = mrkr.lat ;
            [self addMarker: mrkr at:loc withText:mrkr.name xOffset: mrkr.label_x_offset yOffset: mrkr.label_y_offset png: mrkr.png];
        }
    }
}
也在viewController中:addMarker 最后,使用
addMarker
方法将标记添加到RMMarkerManager:

- (void) addMarker: (Marker *) marker at:(CLLocationCoordinate2D)loc withText:(NSString *)text xOffset: (float) x_offset yOffset:(float) y_offset png:(NSString *) png {

    UIImage* markerImage = [UIImage imageNamed:png];
    [marker replaceUIImage:markerImage anchorPoint:CGPointMake(0.38f, 1.08f)];

    [viewMap.markerManager addMarker: marker AtLatLong: loc];

    CGPoint position = CGPointMake(  0.0f, 0.0f);

    [marker changeLabelUsingText: text position: position ];
    }

这里有问题的一行在
设置标记中

Markers *markers = [[Markers alloc] init];
markers
作为实例变量,并在类的
viewWillLoad
方法中执行alloc init,可以纠正此问题


我希望我能更好地解释这一点,但我不确定这为什么会导致问题。但是,现在已经更正了,我会在有时间的时候进行探索。

发布一些代码,说明如何添加地图注释。请更好地解释您所做的工作。使用addAnnotation/removeAnnotation总是为我做这件事。添加了代码和注释。我仍然在route me的内部寻找答案。另一条信息是,当我添加或删除标记时,我可以迭代viewMap.contents.overlay.sublayers(其中viewMap是我的RMMapView)并查看应该存在的所有子层。这是越来越多的出现(在我的新手眼里)有什么东西阻止了子层的绘制,但我肯定不知道是什么阻止了它。
Markers *markers = [[Markers alloc] init];