0

我需要向父视图控制器发送数据;所以(在父母中)我创建了一个方法setLocWithName: loc:来做到这一点。如何创建作为父控制器的对象?我试过parentViewControllerpresentingViewController(如下所示),但我收到了警告:

使用“UIViewController *”类型的表达式初始化“TDViewController *__strong”的不兼容指针类型

// 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];
4

2 回答 2

1

假设 presentingViewController(或 parentViewController?)实际上是 TDViewController 类型,您只需要在第一行进行强制转换:

TDViewController *tDViewController = (TDViewController *)[[self navigationController] presentingViewController];
于 2013-05-01T22:20:12.700 回答
0

正确的方法是委托。TDViewController 需要使自己成为 PLViewController 的委托,您应该在推送到 PLViewController 之前这样做。PLViewController 应该声明一个委托协议,其中包含一个方法,该方法将您需要的两条数据传递回 TDViewController。

不过,要回答您的实际问题,您可以通过在导航堆栈上的索引 1 处获取控制器来获取对 TDViewController 的引用(在您的特定情况下)。这确实不是一个好方法,因为您可能会更改控制器的顺序,或者添加或减去控制器,但您会这样做:

TDViewController *tDViewController = (TDViewController *)[[self.navigationController viewControllers] objectAtIndex:1];
于 2013-05-01T23:31:05.347 回答