在推送之前将NSString变量发送到ViewController的问题

时间:2010-12-31 01:09:04

标签: iphone objective-c cocoa ios

我在将2个NSString变量推送到视图控制器之前遇到问题。

这是推送控制器的一些相关代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    CommentsViewController *c = [[CommentsViewController alloc] initWithNibName:@"CommentsView" bundle:nil];
    c.subreddit = subreddit;
    c.redditId = [[[list objectAtIndex:indexPath.row] objectForKey:@"data"] objectForKey:@"id"];
    c.title = [[[list objectAtIndex:indexPath.row] objectForKey:@"data"] objectForKey:@"title"];
    [self.navigationController pushViewController:c animated:YES];
    [c release];

    NSLog(@"subreddit: %@", subreddit);
    NSLog(@"redditId: %@", [[[list objectAtIndex:indexPath.row] objectForKey:@"data"] objectForKey:@"id"]);
}

请注意,通过NSLog打印变量可以正常工作。

此外,c.title赋值似乎工作正常,因为我可以看到推送控制器上的标题文本。

这里(不只是在这里,任何地方)是我在打印我指定的相应变量时找到(null)的地方:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"subreddit: %@", subreddit);
    NSLog(@"redditId: %@", redditId);
}

2010-12-30 20:06:17.108 RedditReader[1073:307] subreddit: (null)
2010-12-30 20:06:17.131 RedditReader[1073:307] redditId: (null)

subreddit将属性设置为:@property (nonatomic, retain) NSString *subreddit;

为什么我似乎无法正确分配这些值,以便我可以在推送的视图控制器中使用它们?

如何分配这些值,以便我可以在推送的视图控制器中使用它们?

2 个答案:

答案 0 :(得分:4)

在设置变量之前,似乎你的viewDidLoad被调用了(我不使用nib文件所以我不能肯定地说......)。您可以创建一个接收这些变量的init方法,如下所示:

- (id)initWithTitle:(NSString *)aTitle reddit:(NSString *)aReddit ... {
    self.title = aTitle;
    // ...
    if (self = [super initWithNibName:@"CommentsView" bundle:nil]) {
        // ...
    }
    return self;
}

希望这有帮助!

答案 1 :(得分:0)

覆盖viewWillAppear并且你应该看到你的填充变量,从nib统一时调用viewDidLod