无法将值传递给下一个UIViewController

时间:2014-12-12 20:23:05

标签: ios objective-c xcode uiviewcontroller

我创建了一个新的UIViewController类,包括xcode 6中的xib文件。 我设置了所有类似的东西

.h文件下一个ViewController

@interface NextViewController : UIViewController

@property (nonatomic,assign) int gameID;

@end

.m文件下一个ViewController

@synthesize gameID;

.m文件以前的View Controller

NextViewController *nextViewController = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
nextViewController.gameID = -1;
[self.navigationController pushViewController:nextViewController animated:YES];

当我通过调试器运行它时,{。1}}在.h文件中设置但是当我想要访问gameID方法中的值时,我viewDidLoad获取0而不是gameID

2 个答案:

答案 0 :(得分:1)

您的代码看起来非常好&它应该像预期的那样工作a.k.a应该rint" -1"在-(void) viewDidLoad。 我能想到的另一种方法是尝试使用如下的覆盖-init方法:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withGameId:(int)gameIdParam {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.gameID = gameIdParam;
    }
    return self;
}

.h文件&中声明此方法然后使用此方法创建NextViewController的新实例,并将gameID作为参数传递。

请注意,您的代码本身是正确的。我在Mac&它工作正常。

答案 1 :(得分:0)

我认为在设置GameID之前,viewDidLoad会受到影响。尝试在viewDidLoad和nextViewController.gameID = -1上设置断点;看谁先被击中。如果是这种情况,您可以覆盖gameID的setter来执行基于它的逻辑。