在Objective-C中将对象传递给另一个类的最佳方法是什么?

时间:2014-02-16 23:27:21

标签: objective-c cocoa-touch ios7 nsmutablearray

在经过几个月的不间断学习后,真的很享受在我的第一个应用程序上工作。有机会做一个慈善机构iOS App。这是非常基本的应用程序,但我现在卡住了,希望得到一些帮助。

我有以下视图控制器和一个类:

PeopleViewController (datasource and delegate, also holds "people" NSMuteable array)
PersonViewController
Person

我有一个PersonViewController,此控制器连接到一个视图,该视图显示带有几个文本字段和图像上传选项的表单。它在最底部有一个提交按钮,该按钮连接到一个收集字段中所有数据的操作。那就是我打算做的事。

我有一个PeopleViewController datasourcedelegate。它负责提供要在表视图上显示的用户列表。这些用户列表来自数组“people”。目前,我在人员视图控制器的viewDidLoad方法中填充数组。最终datasource将是客户端数据库,但现在这个数组充当该数据库。

我想要做的是如何将我存储在Person类实例中的PersonViewController中的数据放入PeopleViewController数组中。当点击PersonViewController表单的提交按钮时,会创建Person的实例,然后来自字段的数据存储在该新对象中。问题是在viewDidLoad期间填充了人员数组。

问题:

如何将Person中新创建和填充的PersonViewController对象导入PeopleViewController类的人员数组?

实现这一目标的最佳方式是什么?

我正确地说,在运行viewDidLoad之后,持有现有“人员”的人员阵列仍然存在于堆中,我可以将一些新创建的对象添加到该数组中吗?

有点困惑。

我想过几个方法,但有些看起来很单调乏味。我想看看有经验的开发人员如何做到这一点并理解原因。

此致

3 个答案:

答案 0 :(得分:1)

首先,您的数组必须是NSMutableArray,否则您无法在数组中添加或删除对象。

一旦确定您的阵列是可变的,您就可以调用

[personArray addObject:newPerson];

即使您在viewDidLoad中填充数组,也可以执行此操作。请注意,向项目添加项目只需一步,您仍需要更新用户界面。

编辑:
要将新创建的Person对象从一个控制器传递到另一个控制器,您有几个选项。如果PersonViewController有一个指向PeopleViewcontroller的指针,则可以将该数组设为公共属性。

[myPeopleViewController.personArray addObject...]

回答这个问题真的很难,因为我需要看看你的ViewControllers是如何实例化的,以及它们之间的关系是什么。

答案 1 :(得分:1)

也许Singleton对你很有意思。 特别是如果您要增强您的应用程序以与其他ViewControllers共享数据。

这是一个了解DesignPattern和Singleton的好网站 http://www.raywenderlich.com/46988/ios-design-patterns

希望这可以帮助你一点点玩得开心。

格尔茨

答案 2 :(得分:0)

我原来做的是在表单提交按钮上附加了一个操作。然后我声明了一个实例变量并在操作中初始化它。然后我觉得我可以在prepareforsegue方法中获取实例,并访问我在动作中设置的属性,但在尝试从对象实例中读取属性时,我一直保持为null。

我删除了操作并删除了它的连接,然后初始化了一个新对象,将文本字段值存储在prepareforsegue方法中,这对我来说很好。