iPhone 编程 - 在 View Controller 之间传递 NSMutableArray

标签 iphone ios cocoa-touch uiviewcontroller nsmutablearray

我有一个 RootViewController 和一个 DetailViewController,我试图将 NSMutableArray 从 rootView 传递到 detailView。我在 DetailViewController 中创建了一个 RootViewController 对象,并像下面这样访问它

RootViewController *root = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

detailViewArray = [root.rootViewArray copy];

注意:两个数组都在 .h 文件中声明;合成然后分配和初始化 array = [[NSMutableArray alloc] init];

问题:我不太清楚为什么它仍然不起作用。我已经在互联网上尝试了很多解决方案,但对我来说不太管用。根数组的属性是 nonatomic, retain 这有什么问题吗?我是否需要将其更改为某些内容或我遵循的方法不正确..如果有人可以提供帮助,请!

最佳答案

如果您在 DetailViewController 中分配/初始化 RootViewController,则您正在创建 RootViewController 的另一个实例。您没有获得 rootViewController 的相同实例(带有数据)。

就是说,即使将一个 viewController 的引用传递给另一个 viewController 然后查看它的数据也有点糟糕。它在 View 之间创建了紧密耦合。

相反,如果您需要获取数据,请考虑使用委托(delegate)在 View 之间进行通信。

What exactly does delegate do in xcode ios project?

教程:

http://www.theappcodeblog.com/2011/04/15/passing-data-between-views-tutorial-using-a-protocol-delegate-in-your-iphone-app/

另一种选择是创建共享模型(阅读 Model View Controller 模式)。在该模式中,通常通过获取模型的单例实例来创建模型和共享数据:

MyModel *model = [MyModel sharedInstance];

然后,每个 View 都可以设置模型的同一个(单例)实例并从中读取数据。

选择哪个?如果许多 View 共享相同的数据,则该模型会更好。委托(delegate)适合几个 View 通过回调与每个 View 进行通信。

关于iPhone 编程 - 在 View Controller 之间传递 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8130191/

相关文章:

iphone - 如何在 appdelegate 上更改后退按钮的文本

iphone - 是否可以调整 iPhone 的振动级别?

iphone - 以编程方式强制 UIScrollView 停止滚动,以便与多个数据源共享 TableView

iphone - 如何以编程方式在 iOS 应用程序中显示目标的版本/内部版本号?

ios - UI 导航栏白色 Blob 外观

ios - 如何在 ios 中设置 tableView 单元格标题?

ios - 如何解决 "ambiguous use of subscript"错误?

iphone - 强制 UIViewController 仅在横向模式下显示

iphone - 向 UITableVIew headerview 添加约束

ios - 使用 Quartz 2D 在上下文中垂直居中文本