2015-11-13 88 views
0

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

下面是我在我的塞克推法:

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

或许有,我需要检查其他的东西?

回答

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; 
+0

好的,这是有道理的。新创建的字符串也必须是“强”,“弱”还是? –

+1

只是@property(非原子)将使它 –

+0

默认情况下,'强'或'保留' –

2

当prepareForSegue被调用时,Iboutlet没有被设置,所以在你的代码中你试图设置等于零的东西。创建一个公共属性来存储你的字符串,然后在viewDidLoad中设置你的标签。

2

IBOutlets将不会被设置,直到viewDidLoad。您需要通过视图控制器上公开曝光的NSString传递数据,然后将其设置为viewDidLoad

你可以看到一个更深入的解释here.

0

你也可以试试这个:

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

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

相关问题