2012-01-16 79 views
0

我想一些意见,例如和代码大家如何剂量这个..发送数据

到目前为止,我已经越来越细,使用的协议和委托出于传递信息备份通过navigaion控制器从视图到视图。

但是直到最近,我不得不通过控制器堆栈上的多个视图传递一些数据,并且无法弄清楚如何通过代表和协议来实现这一点。我问了一些其他问题,什么即时试图做的,但我想拿出一个应用广泛的解决方案,而不是几个散列在一起的想法,才刚刚做什么,我需要..

Basicly什么,我希望做的是就是这个

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

将数据从第三个传递到第一个视图是目标。我知道如何弹出到第一个视图控制器..我只是不知道如何从这个距离获取信息...让我回到atm的majour东西是我无法在第一视图中声明代理第三个视图委托协议无法覆盖应用程序。

+0

你有没有考虑使用单身? – 0x8badf00d 2012-01-16 03:27:05

+0

我看过单身......但我没有深入了解他们......这就是我现在正在计划的......我需要找到适合我的应用程序设计的东西......我认为协议和代表们会为我做这件事,但我错了。\ – 2012-01-16 03:30:53

回答

1

该怎么办呢,如果你的委托在三视图定义,

在你的第三个观点:

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

确保您firstviewcontroller符合协议

<thirdViewDelegate> 

并在第一个视图中导入第三个视图。

+0

没关系在晚饭后做这件事..它现在有意义..希望我可以得到它的工作,因为我爱我的代表..大声笑 但是,我仍然认为它将是有用的了解nsnotificatoncenter – 2012-01-16 04:09:27

+0

这工作完美.. 。抱歉没有理解的麻烦开始..有些事情出错了我试图解决它,然后用凌乱的代码endnig结束了..但这工作完美后,我解决了这些问题..非常感谢。 – 2012-01-16 21:20:29

0

我想使用observer patternNSNotificationCenter类和NSNotification类。你可以阅读apple official document here。该文档页面中包含一个NSNotification Programming Topics链接。数据可以通过用户信息的NSDictionary发送给观察者。

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

+0

是的我在另一个问题上已经听说过这个消息。我现在要做一些阅读。在检测事件的方法方面,Kinda看起来好像有点像java。我会保持这个线程去看看我是否有其他答案,否则我会将你的标记标记为正确。 – 2012-01-16 03:29:33

0

您是否考虑过将数据存储在t他设备和分开访问它。

– viewWillAppear: 
0

取决于你喜欢回传,您可以使用一个Singleton, NSUserDefault, pass it via AppDelegate, use delegation pattern, or just use set of properties的数据:当视图控制器调用您可以将所有的数据存储在SQLite数据库,并刷新数据。 The 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); 
}