我有一个包含一些行的表视图,每行都有其详细信息披露按钮。 我希望当用户点击该按钮时,会出现另一个表视图(由故事板定制)并显示一些相关数据。
来自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
结果为空。
我在这里缺少什么?谢谢!
答案 0 :(得分: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
,并且当可能影响标签的任何内容发生时,例如视图加载或更改的数字,您调用方法。