2015-11-13 92 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屬性傳遞文本。

相關問題