0

所以我有 2 个视图,每个视图中都有一个相同类型的对象。我在第一个视图中使用了一个块来设置对象,并且当我转到它时我将此块传递给第二个视图,以便可以在第二个视图中为对象运行完全相同的设置。(在某些情况下,它是一张地图,我在第一张地图上添加了标记和路径,然后我在第二个屏幕上继续使用地图的放大版本,该地图将具有相同的标记和路径)

现在有一个变量我只想存在于第一个视图中,但在第二个视图中仍然有效,它将是一个特殊标记,可以从第一个视图更改其位置(仅在后台更新 gps在第一个视图中),更改将出现在第二个视图中。

所以我实际上要做的是:

@implementation WhereAmIView 
{ 
RMMarker *iAmHere;
void (^setupMap)(RMMapView*);
} 

- (void) setup {

//__block RMMarker *_iAmHere = iAmHere;

    setupMap = ^(RMMapView *mapViewBlock){
        if(!iAmHere)
            iAmHere = [[RMMarker alloc]initWithUIImage:[UIImage imageNamed:@"marker-red.png"] anchorPoint:CGPointMake(0.5, 1.0)];

        //there is a bunch of other stuff i have omitted here, but the important bit is above this comment
        [iAmHere setTextForegroundColor:[UIColor blueColor]];
        [iAmHere changeLabelUsingText:@"You are Here"];
        [markerManager addMarker:iAmHere AtLatLong:appDelegate.currentLocation.coordinate]; //dont worry about this stuff, just put it here to show that stuff is happening
    }

    setupMap(mapView);
}

- (IBAction)enlargeMap:(id)sender {

    MainViewController *mainViewController = (MainViewController*)[self viewController];
    FullScreenMapViewController *fsmvc = [[FullScreenMapViewController alloc] initWithCenter:CLLocationCoordinate2DMake(0, 0) andMap:@"tokai2.db"];
    fsmvc->setupMap = setupMap; //this gets run in its viewDidAppear effectively
    [mainViewController presentModalViewController:fsmvc animated:true];
}

所以我这样使用是否安全iAmHere,因为这个块只会存在于这个视图和下一个视图中,所以技术上保留周期无关紧要?如果我使用在代码中而不是在块_iAmHere中注释掉的那个,是否会在第一个视图中更改为,对第二个视图中的进行更改?可能根本不可能在两个地图视图中添加相同的标记,但理论上这可行吗?iAmHereiAmHere_iAmHere

或者也许有更好的方法可以完全做到这一点......

4

0 回答 0