【问题标题】:What is the best way to pass an object to another class in Objective-C?在 Objective-C 中将对象传递给另一个类的最佳方法是什么?
【发布时间】:2014-02-16 23:27:21
【问题描述】:

经过几个月的不间断学习,我真的很享受开发我的第一个应用程序。有机会做一个慈善iOS App。这是一个非常基本的应用程序,但我现在卡住了,需要一些帮助。

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

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

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

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

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

问题:

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

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

在运行 viewDidLoad 之后,持有现有“人”的人员数组仍然存在于堆中,我是否正确地说,我可以知道如何将这个新创建的对象添加到该数组中?

有点困惑。

我已经想到了一些方法,但有些方法似乎很乏味。我想看看有经验的开发人员如何做到这一点并了解原因。

问候

【问题讨论】:

    标签: objective-c cocoa-touch ios7 nsmutablearray


    【解决方案1】:

    首先你的数组必须是一个 NSMutableArray,否则你不能在数组中添加或删除对象。

    一旦你确定你的数组是可变的,你就可以调用

    [personArray addObject:newPerson];
    

    您可以这样做,即使您将数组填入viewDidLoad。请注意,向数组中添加项目只是一步,您仍然需要更新用户界面。

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

    [myPeopleViewController.personArray addObject...]
    

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

    【讨论】:

    • 向数组中添加对象是没有问题的。我的意思是如何从一个控制器到另一个控制器获取对象的新实例。
    • 像这样将可变数组公开为公共属性并不是一个好主意。
    • @Paul.s 这只是一种设计偏好。如果你不喜欢它,你可以提供一个addItem 方法而不是暴露数组,但这有时会很痛苦,因为你需要提供插入、删除、查询的函数......
    【解决方案2】:

    也许单身人士对你来说很有趣。 特别是如果您将增强您的应用程序以与其他 ViewControllers 共享数据。

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

    希望这对您有所帮助,并在 iOS 上玩得开心。

    问候

    【讨论】:

    • 非常感谢我会调查的。我意识到segues并不总是有用的。在其他情况下,我不希望创建另一个控制器来推送。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2012-03-01
      • 2011-10-15
      • 1970-01-01
      相关资源
      最近更新 更多