【问题标题】:Call a method across classes跨类调用方法
【发布时间】:2014-09-20 12:26:11
【问题描述】:

我的应用中有两个视图。在第一个视图中,我有一个表格视图,它显示从 Internet 下载的数据。 FirstViewController 有获取数据和更新视图的方法:

- (void)viewDidLoad
{
    // Create PlanGenerator
    _planGenerator = [[PlanGenerator alloc] init]

    [self loadPlan];

- (void)loadPlan
{
    _plan = [_planGenerator getData]

    // Updating the view

    // Updating the table view
    [self.tableView reloadData]
}

要从 Internet 下载数据,我有一个名为 PlanGenerator 的类。这个类有一个名为getData的实例方法,它返回一个NSArray。表格视图使用实例变量_plan(数组)在表格视图中显示数据。

在第二个视图(由SecondViewController 控制)中,您可以对下载的内容进行一些调整。为了告诉这些更改PlanGenerator,我使用了class properties 的概念。现在,当我在第二个视图中更改某些内容时(实际上它只是一个参数),我想从 FirstViewController 调用方法 loadPlan

我的第一个想法是创建一个类方法,但随后我必须为该方法使用的每个变量创建“类属性”。

有更简单的方法吗?

【问题讨论】:

  • 一些事情......当你说“第二个视图”时,你真的是指第二个视图控制器吗? (有一个的区别。)你知道alloc/init创建了一个new对象,它没有你提供给其他PlanGenerator的信息其他一些代码?
  • 是的,我知道这是一个很大的区别,但我认为很明显任何 View 也有一个 ViewController。无论如何,我在我的问题中添加了这一点。但我真的不明白你对问题的第二部分的意思。我知道PlanGenerator 的每个新对象都是不同的,但是getData 返回的数据对于每个实例都是相同的。
  • 有些人在一个控制器中有多个视图,并在必要时隐藏/显示它们。 (耸耸肩)我看到你已经改变了你的问题,所以PlanGenerator 不是一个局部变量。这有助于我评论的第二部分;我说的是你将如何在方法结束时超出范围的事情调用loadPlan
  • 好的,现在我明白了,是的 _planGenerator 和 _plan (array) 是实例变量。

标签: ios objective-c class methods


【解决方案1】:

你缺少一些基础知识。

试试这个设计,假设FirstVC用来显示数据,有tableview。 SecondVC(您的 PlanGenerator)用于获取/下载数据。

在SecondVC中:

  1. 创建 FirstVC 将提供的任何属性(参数等表示标准)来决定下载什么。

  2. 创建一个公共方法getData。

在FirstVC中:

  1. 创建一个 iVar(说 _myPlanGeneartor)并分配它。

现在,您可以从 FirstVC 的实例访问 SecondVC (_myPlanGenerator) 的实例。有了它,您可以提供标准参数和请求数据 (getData)。

【讨论】:

  • 哦,对不起,我觉得我表达得不好。我有 2 个 ViewController(在 MVC 模式中是控制器),我有 PlanGenerator 类(在 MVC 模式中是模型)。这实际上是我的结构。
  • 你有别的想法吗?
猜你喜欢
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 2016-02-14
相关资源
最近更新 更多