数据未传递到故事板中的详细视图控制器

时间:2015-11-13 19:06:08

标签: ios objective-c storyboard

所以我知道这个问题之前已经得到了回答,但我觉得我的问题只是我忽略的一些细节。我正在尝试使用故事板在我的视图控制器之间传递数据,但是一旦我推动我在另一端没有得到任何东西。

以下是我的seque推送方法中的内容:

if ([segue.identifier isEqualToString:@"DetailPush"]) {
    NSMutableDictionary *selectedObject = [self.userArray objectAtIndex:self.selectedIndexPath];
    PhotoStreamDetailViewController *destController = [segue destinationViewController];
    destController.label.text = selectedObject[kImage][kURL];
}
  • 我设置了一个断点,以确保我的对象不是'nil'(传递之前有数据)。
  • 我创建了一个从故事板到详细视图控制器的IBOutlet

也许还有其他我需要检查的事情?

4 个答案:

答案 0 :(得分:2)

在调用prepareForSegue时未设置Iboutlet,因此在您的代码中,您尝试设置等于nil的内容。创建一个公共属性来存储您的字符串,然后在viewDidLoad中设置您的标签。

答案 1 :(得分:2)

IBOutlets不会被设置到viewDidLoad。您希望通过视图控制器上公开的NSString传递数据,然后在viewDidLoad上进行设置。

您可以看到更深入的解释here.

答案 2 :(得分:1)

您无法直接从ViewControllerA到ViewControllerB设置标签文本。

在ViewControllerB接口中创建NSString属性:

@property (nonatomic) NSString *labelText;

然后将此字符串从ViewControllerA传递到ViewControllerB:

PhotoStreamDetailViewController *destController = [segue destinationViewController];

destController.labelText = selectedObject[kImage][kURL];

在ViewControllerB中,即viewDidLoad:

label.text = self.labelText;

答案 3 :(得分:0)

你也可以试试这个:

    PhotoStreamDetailViewController *destController = [segue destinationViewController];
    [destController loadView];
    destController.label.text = selectedObject[kImage][kURL];

这样就可以避免NSString属性传递文本。