Sta*_*tik 2 objective-c ios swift
我被要求在两个(或许多)无关(通过segue)视图控制器之间来回传递数据.
有三个视图控制器,ViewController A- ViewController B和ViewController C.
ViewController A塞入ViewController B和ViewController B塞入ViewController C.
我想分享之间的数据(如一个文本框的文本)ViewController A和ViewController C来回
经过调查,我发现了四种可能的方法:
staticmember 创建一个类,以存储textfield中包含的数据.NSUserDefaults实现这一目标最合乎逻辑的方法是什么?我想用最少的开销.谢谢!
这里有两个问题的解决方案,比委托或默认系统更好(IMO),并且比单例,静态变量,全局变量更好.
1.传递数据通过 B.
你有一个像这样的结构:A->B->C并且C需要一些数据A.所以视图控制器并不是真正无关,它们只是没有直接连接.处理一个很好的策略是通过必要的信息通过 B.也就是说,A不一定知道C,可能不应该知道.而且C也不需要知道A.从这个角度来看A,有一项工作要做,并且需要一定数量的信息.A因此,应该B在A->Bsegue 期间提供所有必要的信息.如果B用它C来完成部分工作,那很好,但是A不关心那个.同样,C不知道A甚至B- 所有人都C知道,它给了一些数据来完成工作.由于它是B实例化(通过segue)C,因此有B责任提供必要的信息.
在另一个方向也是如此.如果C生成一些A最终需要的数据,B应该从C之前检索它C,并A从中检索它B.
您需要A委派代表的唯一原因C是,如果A需要在发生更新时立即查找更新.如果发生这种情况,这可能是一个很好的迹象,你应该继续下一个选项......
2.使用您的数据模型.
很容易忘记MVC中的M应该是应用程序中的平等伙伴.我们经常只让我们的视图控制器管理所有数据,然后尝试弄清楚如何将正确的数据流经视图控制器图形到正确的位置.这可以让你的应用程序少了很多灵活性比它可能是:在A->B->C像你有,你突然从中间插入另一个视图控制器防止一种情况B,并C,例如,因为新的家伙不知道它需要将某些数据传递B给C.
答案是使用数据模型 - 管理应用程序数据的对象或对象集.如果您在一个控制器(C在您的情况下)中生成了某些其他控制器(如A)所需的数据,则该数据必须对整个应用程序而言不仅仅对单个视图控制器很重要.这正是应该作为数据模型的一部分进行管理的数据类型.如果你这样做,那么你不必担心将大量不同的数据传递给可能需要它的每个视图控制器,或者(例如B)可能需要将它传递给其他人.您只需传递一件事 - 对数据模型的引用或数据模型的相关部分.
让我们具体说明这C实际上是一个"设置"视图控制器,并且有问题的数据是用户的名字.A需要知道名称的更新,以便它可以正确显示它.B根本不在乎这个名字.因此,您设置了某种Model包含username属性的类.的Model可能是由应用程序委托在启动时被实例化,或通过根视图控制器A,和所述模型的引用被传递到在视图控制器图中的每个视图控制器.现在C可以username在用户更改时在模型中设置属性.A可以读取相同的属性来检索数据 - 实际上,它可以使用KVO来查找它关心的模型的所有更改.A我不知道,C反之亦然,你不必费心去创建另一个委托协议只是传递一些数据.
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |