在复杂的导航堆栈周围发送数据

时间:2012-01-16 03:19:50

标签: iphone ios uinavigationcontroller

我想要一些关于每个人如何服用此药的意见,示例和代码。

到目前为止,我一直在使用协议和代理进行处理,以便通过navigaion控制器从视图向视图传递信息。

然而就在最近,我不得不在控制器堆栈上的多个视图中传递一些数据,并且无法弄清楚如何使用委托和协议来实现这一点。我已经问了一些其他问题,这些问题帮助我了解了很多关于什么我试图做但我想提出一个应用程序范围的解决方案,而不是几个哈希的想法,只是做我需要的..

基本上我要做的就是这个

Navigation stack
- First View
-- second View
--- Third View - current view.

将数据从第三个视图传递到第一个视图是目标。我知道如何弹出到第一个视图控制器..我只是不知道如何在那个距离上获取信息...阻止我回到atm的主要事情是我无法在第一个视图中声明代理第三个视图委托协议,但没有应用程序崩溃。

4 个答案:

答案 0 :(得分:1)

如果您的委托是在第三视图中定义的,那该怎么做呢

在你的第三个观点中:

 YourFirstViewController *fvc = [self.navigationController.viewControllers objectAtIndex:0];
    self.delegate = fvc;
    [self.delegate yourMethodHere];

确保您的firstviewcontroller符合协议

<thirdViewDelegate>

并在第一个view.h中导入第三个视图

答案 1 :(得分:0)

我想将observer patternNSNotificationCenter类和NSNotification类一起使用。您可以阅读apple official document here。该文档页面中包含NSNotification Programming Topics链接。可以通过NSDictionary为userInfo将数据发送给观察者。

使用观察者模式,那些视图控制器可以是松散耦合。在开发项目时更改原始设计时更灵活。

答案 2 :(得分:0)

您是否考虑过将数据存储在设备上并单独访问它。您可以将所有数据存储在sqlite数据库中,并在视图控制器调用时刷新数据:

– viewWillAppear:

答案 3 :(得分:0)

根据您要传回的数据,您可以使用Singleton, NSUserDefault, pass it via AppDelegate, use delegation pattern, or just use set of propertiesThe decision should be made by you according to the design and the requirement.假设您只想传回一个字符串,您可以执行以下步骤,

在FirstViewController中声明一个属性。

@property (nonatomic, retain) NSString *thePassbackValue;

访问ThirdView中的FirstViewController实例。

FirstViewController *fvc = [self.navigationController.viewControllers objectAtIndex:0];

将值设置为属性

fvc.thePassbackValue = @"someValue";

在第一个视图中访问该值,

//在您的第一个视图中,

if(self.thePassbackValue != nil)
{
//Use the value
NSLog(@"the value %@", self.thePassbackValue);
}