Iphone iOS 6将数据从TableView传递到Detail View
我有一个包含一些行的表视图,每行都有详细信息披露按钮。 我希望当用户点击该按钮时,另一个表视图(由脚本定制)出现并显示一些相关数据 从Iphone iOS 6将数据从TableView传递到Detail View,iphone,ios,objective-c,uitableview,storyboard,Iphone,Ios,Objective C,Uitableview,Storyboard,我有一个包含一些行的表视图,每行都有详细信息披露按钮。 我希望当用户点击该按钮时,另一个表视图(由脚本定制)出现并显示一些相关数据 从TableViewController.m -(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { DetailViewController *detailViewController = [
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
结果为空
我错过了什么?谢谢大家! 如果此代码实际编译,这可能是您的问题:
DetailViewController *detailViewController = [[detailViewController alloc] init];
应该是:
DetailViewController *detailViewController = [[DetailViewController alloc] init];
但首先,您不应该alloc/initing
您的视图控制器。当您在Interface Builder中自定义视图控制器时,如果需要这些自定义设置,您必须像下面这样实例化它:
[self.storyboard instantiateViewControllerWithIdentifier:@"MyStoryboardIdentifier"]`
您必须将控制器的脚本ID设置为“MyStoryboardIdentifier”或任何您想要使用的标识符
此外,正如您在评论中指出的,您遇到了一个计时问题:您的详细信息控制器的viewdiload
在设置车次之前运行。更好的方法是确保它在不考虑顺序的情况下工作:
- (void)updateTrainNumberLabel
{
self.trainNumberLabel.text = self.trainNumber;
}
- (void)setTrainNumber:(NSString *)trainNumber
{
_trainNumber = trainNumber;
[self updateTrainNumberLabel];
}
- (void)viewDidLoad
{
...
[self updateTrainNumberLabel];
}
换句话说,您可以使用单独的方法配置标签,在这种情况下,
updateTrainNumberLabel
,当发生任何可能影响标签的情况时,例如视图加载或更改编号,您可以调用该方法。添加断点和NSLog来调试您的代码怎么样?您确定在TableViewController.m中不会导致nullyeah在使用NSLog的table view controller中我可以看到正确的值!我已尝试将NSLog放入这两个文件中。我可以看到的是,DetailTableViewController的viewDidLoad中的NSLog在TableViewController的accessoryButtonTappedForRowWithIndexPath中的NSLog之前打印。怎么可能?+1用于捕捉nil上的alloc init。故事板建议是一个很好的建议,但是从nib分配/初始化vc仍然是可以的。如果要使用故事板,还值得一提的是segues。是的。我的意思是如果你想定制故事板,你必须使用实例化eviewcontrollerwhiteIdentifier
。这是我的打字错误,在我的Xcode中,这是细节!我还将InstanceEviewControllerWithiIdentifier替换为alloc init,但没有更改。没有更改,因为您还有其他问题。但是,在这种情况下,您必须使用InstanceViewController身份识别器
,否则它将永远无法工作。我根据您的一些评论扩展了我的答案。