2011-05-07 82 views
1

我有一个iPhone应用程序,它有一个父视图控制器与一些数据。我点击其中一行,并将一个Detail VC推入堆栈,在那里我想编辑父级的数据。当我弹出Detail视图时,Parent视图应该会看到更改后的数据。iPhone:如何在父视图控制器和细节视图控制器之间来回传递数据

实现此目的的最简单和最好的方法是什么?我知道我可以:a)在视图控制器链上直接编辑父数据( - messy),b)在弹出Details视图时使用代表进行回调( - 繁琐),c)发送通知( - 工作太多) 。

必须有一些更简单的方法,可能使用属性传递从父视图到细节视图完全相同的指针,以便细节视图与父项相同地处理相同的数据?这样,Detail视图在弹出堆栈时不需要执行任何操作。

回答

2

是,它的所谓的模型 - 视图控制器。你真的希望你的数据被存储到另一个类中,称为模型。需要了解模型更改的对象应该被告知对其的更改,这可以通过关键值观察或委派来完成。在这种情况下,您的父视图控制器将订阅模型中的更改。当数据改变时,父视图控制器可能会被通知,并刷新他的表格。如果父项目前不可见,则可以挂起这些更新并在显示时更新父项。

0

在我正在研究的项目中,我创建了一个名为“DataServices”的类。该DataService的目标是“在applicationDidFinishLaunching”中实例化一次:

ds = [[DataServices alloc] init]; 
ds.managedObjectContext = self.managedObjectContext; 
[ds initialize_data]; 

需要数据的任何模块声明是这样的:

extern DataServices *ds; 

...而且是免费为需要访问共享的应用数据。读。写。修改。抽象是完整的。我可以做任何我想要的数据的编码,存储和来源,并且需要数据服务的各种模块的接口不会改变。为我所做的工作正常工作。也许这可能适合你。

只要检测到从班级到班级的变化。 DataServices中有一个名为“modified”的标志。该标志在例如显示可以进行更改的新视图控制器之前被清除。 DataServices中的任何“set”或“update”成员函数都会设置此标志。有了这个:

if(ds.modified) 
{ 
// Do what you have to do if data is modified 
} 

标志可以为设置组的要求,你不一定需要有一个单一的一个尺寸适合所有的修改标志设置。标志也可能很复杂。如果特定数据达到阈值,您可能会触发一个标志,等等。

相关问题