0

我有一个包含一些行的表格视图,每一行都有其详细信息披露按钮。我希望当用户点击该按钮时,会出现另一个表格视图(由故事板自定义)并显示一些相关数据。

TableViewController.m

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {

    DetailViewController *detailViewController = [[detailViewController alloc] init];
    //creating a parse object
    PFObject *checkin = [_dataSourceArray objectAtIndex:indexPath.row];
    //getting data i want
    NSString *trainNumb = [checkin objectForKey:@"trainNumber"];
    //passing the data
    detailViewController.trainNumber = trainNumb;   
}

从 DetailTableViewController.m

- (void)viewDidLoad {
    [_trainNumberLabel setText:_trainNumber];
}

问题是在 DetailTableView 中的NSString结果为空。

我在这里缺少什么?谢谢!

4

1 回答 1

1

如果此代码实际编译,这可能是您的问题:

DetailViewController *detailViewController = [[detailViewController alloc] init];

它应该是:

DetailViewController *detailViewController = [[DetailViewController alloc] init];

但你不应该alloc/initing首先成为你的视图控制器。当您在 Interface Builder 中自定义视图控制器时,如果您想要这些自定义,您必须像这样实例化它:

[self.storyboard instantiateViewControllerWithIdentifier:@"MyStoryboardIdentifier"]`

而且您必须将控制器的故事板 ID 设置为“MyStoryboardIdentifier”或您想要使用的任何标识符。

此外,正如您在评论中指出的那样,您遇到了时间问题:您的详细控制器viewDidLoad在您设置列车号之前运行。更好的方法是确保无论顺序如何都能正常工作:

- (void)updateTrainNumberLabel
{
    self.trainNumberLabel.text = self.trainNumber;
}

- (void)setTrainNumber:(NSString *)trainNumber
{
    _trainNumber = trainNumber;
    [self updateTrainNumberLabel];
}

- (void)viewDidLoad
{
    ...
    [self updateTrainNumberLabel];
}

换句话说,您在一个单独的方法中配置您的标签,在这种情况下updateTrainNumberLabel,当发生任何可能影响标签的事情时,例如视图加载或正在更改的数字,您调用该方法。

于 2013-09-08T16:10:47.903 回答