Share NSArray data between two ViewControllers
我正在构建一个应用程序,通过它,我希望在两个不同的视图控制器之间共享可变的NSarray。
原因是,在其中一个viewcontrollers(main)上,我需要主动检查数组的内容,如果满足某些属性,则显示警报,而另一个viewcontroller(ui)是用户将警报对象设置到所述数组并管理TableView中的警报对象的UI。
所以我的问题是,这个数组可以驻留在我的应用程序代表中吗?
或者我最好让它驻留在主视图(根视图控制器)中,并基本上将其传递给第二个UI视图控制器,每次动态填充其中的UITableView,然后将其传递回主视图以更新数组?
- 也许看看委托设计模式,你应该能够根据你的情况来设计它。enroyed.com/ios/…
- 属性是否特定于视图或模型的状态?如果是模型,那么数据应该驻留在模型类中。如果是视图,那么主视图控制器可能会工作,可以通过委托模式进行更新。
- @奥利弗拉特金森,谢谢你的评论,是的,我对委托很熟悉,但是这个范例基本上不是一个数组,位于一个刚刚来回传递的视图控制器中吗?
有很多方法可以做到这一点。它取决于视图控制器的层次结构和问题的层次结构。
你可以:
创建一个singleton:http://www.galloway.me.uk/tutorials/singleton-classes/
使用segue/delegate前后传递此阵列:在视图控制器之间传递数据
将数组作为一个视图控制器的属性,将此视图控制器的弱引用传递给另一个,然后访问类似于viewController1.array的内容。
在每个viewcontroller中创建一个属性,并将其与kvc同步:http://developer.apple.com/library/ios/documentation/cocoa/conceptive/keyValueObservation/keyValueObservation.html//apple-ref/doc/uid/10000177i
等。
- +1个选项。富有洞察力的很高兴您没有包括AppDelegate、SQLite或NSUserDefaults
- 是的,我一开始以为它至少值得一提,但后来我意识到它一文不值。如果其他人记得其他有效的方法,请在此处评论,我将编辑答案。
- @Lucaseduardo我现在有点困惑!你知道,在这两个视图控制器之间,我已经设置了一个委托(为了正确地解除形式化的UI视图控制器),所以在那里,我准备好使用我已经创建的委托协议来在我意识到它时来回传递我的数组….我可以将数组作为ui viewcontrollers init方法的参数传入!然后,当我将数组作为指针传递时,所做的任何更改都会立即反映出来,我甚至不需要使用委托将其传递回去,我是否遗漏了什么??
- 是的,那是正确的。当您传递一个指针时,它们将指向相同的内存位置,并且一个指针中的任何更改都将由另一个指针反映出来。我的回答是来回传递数据的一般性,而不是集中在你的问题上。
- @卢卡斯多谢卢卡斯的消息!那么,什么时候使用委托来回传递而不是作为指针传递呢?你知道我怎么能把nsmutablerray作为一个"价值"来传递吗?(这样我就可以返回修改过的nsmutablearray并覆盖另一个)
- 在这种情况下,委托可以被使用,当您传递一个对象的副本时,有时您希望返回更改的值,有时不希望,所以您传递一个副本而不是同一个引用,否则对象将始终被更改。在目标C中,没有直接通过"值"传递一个对象的方法,你必须传递一个对象的副本,比如[myArray copy]。
- 多谢卢卡斯。