我需要将数据发送到父视图控制器;所以(在父母中)我创建了一个方法setLocWithName: loc:
来执行此操作。如何创建作为父控制器的对象?我尝试了parentViewController
以及presentingViewController
(如下所示),但我收到了警告:
不兼容的指针类型初始化'TDViewController * __ strong',表达式为'UIViewController *'
// set object of parent view controller
TDViewController *tDViewController = [[self navigationController] presentingViewController];
// get data
NSArray *locs = [[PLStore sharedStore] allLocs];
PL *setselectedLoc = [locs objectAtIndex:[indexpath row]];
// send data to parent view controller
[tDViewController setLocWithName:[setselectedLoc pLocName] loc:[setselectedLoc loc1]];
// Pop this view controller off the stack
[self.navigationController popViewControllerAnimated:YES];
答案 0 :(得分:1)
假设presentViewController(或parentViewController?)实际上是TDViewController类型,你只需要在第一行进行强制转换:
TDViewController *tDViewController = (TDViewController *)[[self navigationController] presentingViewController];
答案 1 :(得分:0)
执行此操作的正确方法是使用委派。 TDViewController需要使自己成为PLViewController的委托,你应该在推送到PLViewController之前做。 PLViewController应该声明一个委托协议,其中包含一个方法,它传递你需要在TDViewController中返回的两个数据。
要回答您的实际问题,您可以通过将控制器放在导航堆栈上的索引1(在您的特定情况下)来获取对TDViewController的引用。这实际上不是一个好方法,因为你可能会改变控制器的顺序,或者添加或减去控制器,但这就是你要这样做的方法:
TDViewController *tDViewController = (TDViewController *)[[self.navigationController viewControllers] objectAtIndex:1];