1

我有 2 个视图控制器。我想NSArray通过 segue 将一个转移到另一个。

我已经查看了关于 SO 的所有其他问题,但我的代码仍然无法正常工作。我想转移 matchObject。

视图控制器.m

#import "mapViewController.h"

//call map view
-(void) callMap {
    [self performSegueWithIdentifier: @"callMap" sender: self];
}

//pass data
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"callMap"]) {
        UINavigationController *nc = segue.destinationViewController;
        UIViewController *tvc = [nc.viewControllers objectAtIndex:0];
        tvc.matchObject = self.matchObject;
    }
}

我在最后一条语句中收到错误,说找不到属性 matchObject。

我已经在“mapViewController.h”中定义了该属性

@property (nonatomic, strong) NSArray *matchObject;

并在'mapViewController.m'中合成它

@synthesize matchObject = _matchObject;

我已正确连接情节提要中的 segue。

4

4 回答 4

1

UINavigationController 没有名为 matchObject 的属性。UIViewController 也没有。您要做的就是将destinationViewController 转换为您的类的一个实例。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"callMap"]) {
        MapViewController *tvc = (MapViewController *)segue.destinationViewController;
        tvc.matchObject = self.matchObject;
    }
}
于 2013-07-19T04:38:56.130 回答
1

我认为问题出在 UINavigationController ...

您可以像这样在 mapViewController 类中为 matchObject 创建一个设置器。

- (void)setMatchObject:(NSArray *)matchObject
{
   _matchObject = matchObject
}

而这个更新的 prepareForSegue 方法......

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"callMap"]) {
        [segue.destinationViewController performSelector:@selector(setMatchObject:) withObject:self.matchObject];

    }
}

希望这对你有用。

于 2013-07-19T04:39:05.283 回答
1

代替

UIViewController *tvc = [nc.viewControllers objectAtIndex:0];
tvc.matchObject = self.matchObject;

你应该有:

mapViewController *tvc = [nc.viewControllers objectAtIndex:0];
tvc.matchObject = self.matchObject;

您仍然收到错误的原因是因为 UINavigationController 没有名为 matchObject 的属性。

并且类名应该以大写字母开头。你说你的类叫 mapViewController.m 应该是 MapViewController.m

于 2013-07-19T04:53:08.690 回答
0

我认为这会起作用...在 performSegueWithIdentifier 时将数组传递给发送方,如下所示。

#import "mapViewController.h"

-(void) callMap {
    [self performSegueWithIdentifier: @"callMap" sender: matchObject];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"callMap"]) {
        UINavigationController *tvc = segue.destinationViewController;
        tvc.matchObject = sender;
    }
}
于 2013-07-19T04:51:48.553 回答