通过App Delegate在视图之间共享数据

时间:2009-03-19 15:15:08

标签: iphone cocoa-touch

我有一个关于在视图之间共享数据的问题,希望它不是太基础。我在appDelegate中有一个NSMutableArray,用say(Object1,Object2,Object3)。创建新对象(并添加到数组中)时,我需要在下一个视图上访问该对象。以前我只是把对象传递给下一个视图,但是这很乱,看起来很错误。

所以现在我将所有对象放在一个地方,但是如何在下一个视图中访问对象(刚刚创建的对象)因为我不知道它被添加到哪个索引?每次创建对象时是否需要检查数组的计数,然后从中确定数组索引并将该索引值传递给下一个视图?或者有没有办法通过某种独特的名称从NSMutable数组中检索对象?

另一种解决方案是遍历所有对象,直到找到我想要的对象,但我想知道正确的方法是什么。谢谢你的时间。

编辑:感谢您的回复,我将澄清我正在尝试做什么。我有一个NavigationController,你进入的每个视图都需要访问Object。你可以把它想象成一本书。您选择要阅读的书籍的第一个视图,然后每个视图都是您选择的书籍中的一个页面。在App Delegate中是所有书籍的阵列。你会通过每个“页面”查看这本书吗?

请记住,这是一个粗略的例子,因为当你选择这本书时,你已经知道了它所处的索引。假如你创建一本书,那么你不知道它在数组中的位置。

2 个答案:

答案 0 :(得分:3)

如果您可以为每个对象创建一个有意义的唯一名称,只需使用NSMutableDictionary并让控制器通过指定密钥来获取数据。像这样:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSString *obj = [appDelegate.dict objectForKey:@"unique-name-here"];

希望有所帮助。

答案 1 :(得分:2)

我不确定你是在讨论在不同控件之间共享对象,还是在谈论不同的视图控制器 - 比如主 - 详细视图,尽管我怀疑这就是你的意思。

在这种情况下,如果你有一个专门用于编辑单个对象的详细视图,那么在我看来,给视图控制器一个对象进行编辑并不是错误的。如果您正在维护一个数组,您仍然可以将新对象添加到数组中,并在将对象放到屏幕上之前将其分配给新的视图控制器。

如果您可以更具体地了解您的应用程序的工作原理,我可以为您提供更好的帮助。