2013-07-01 67 views
-1

visual 如何從內VC4.m得到參考VC1?

我試過self.parentViewController.presentingViewController.parentViewControllerself.parentViewController.presentingViewController但他們似乎沒有工作。

但後來我決定看看它是否會工作,當我使用委託來存儲對VC1的引用,並仍然爲VC1上的所有公共屬性爲空。在這種情況下VC1不會在內存中嗎?如果不是,爲什麼不呢?如果是這樣,爲什麼其(強)屬性爲空?

編輯:我也剛剛通過NSLogs發現,VC4中的viewDidLoad在執行並設置委託引用完成之前執行didSelectRowAtIndexPath之前執行,這可以解釋爲什麼該方法不起作用。我如何確保下一個VC只在didSelectRowAtIndexPath的所有其他行完成時才被推送?無論如何,在選擇一行之前,VC1上還有其他的公共屬性(不是空值)(我剛剛在VC2的didSelectRow中用NSLog驗證了這一點),並且當我試圖將它們變爲空時通過任何方法通過VC4訪問它們。

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
// Navigation logic may go here. Create and push another view controller. 
/* 
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil]; 
// ... 
// Pass the selected object to the new view controller. 
[self.navigationController pushViewController:detailViewController animated:YES]; 
*/ 

// set reference to selected convo. it is stored in ConversationsParentVC public property 
self.conversationsParentVC.selectedConvo = self.conversationsParentVC.conversationsArray[indexPath.row]; 

// temp 
AppDelegate *delegate = getAppDelegate; 
delegate.activeVC = self.conversationsParentVC; 
ConversationsParentVC *convosParentVC = (ConversationsParentVC*)delegate.activeVC; 
NSLog(@"boop %@", delegate.activeVC); 
NSLog(@"beep %i", convosParentVC.conversationsArray.count); 
} 

stack trace

+0

發佈你的'tableView:didSelectRowAtIndexPath:'源代碼。 –

+0

@robmayoff並不多,但我已經發布了它。謝謝參觀。 – mkc842

+0

你在使用故事板嗎?當調用VC4的'viewDidLoad'時什麼是堆棧跟蹤? –

回答

3

在設置從表視圖細胞推送SEGUE,所述tableView:didSelectRowAtIndexPath:方法之前SEGUE火災被調用。您需要將您的信息傳遞給源視圖控制器的prepareForSegue:sender:方法中的目標視圖控制器。

此外,你可能會發現this answer有幫助。

你也可以發現它有用知道sender論點prepareForSegue:sender:是表視圖單元格,並表視圖的indexPathForSelectedRow已經被設置爲電池的索引路徑。

相關問題