Objective-C - 从控制器向工作者类传递模型对象

3
我是一名完全的新手,正在开发我的第一个iPhone项目。为了让您了解我的背景,我已经做了4年的.NET开发人员。我正试图遵循MVC模式,在我的第一个项目上按照正确的方式进行操作。我不想仅仅为了使它们工作而将所有东西都凑在一起。
这是我的情况:我正在尝试解析只包含1个对象的XML源。我有一个模型对象,表示我从解析XML源得到的对象。我已经对NSXMLParser进行了子类化,并能够成功解析XML源并返回值(使用NSLog来检查值)。这就是我的问题所在。当从控制器移动到子类时,调用XMLParser的最佳方法、填充模型对象并将其返回给控制器是什么?
我正在寻找某种模式来遵循,这被认为是最佳实践。我不想只是把所有逻辑放到控制器的一个方法中,这样它就无法在任何情况下重复使用。
3个回答

2
如果您让您的视图控制器实现NSXMLParserDelegate协议,并将NSXMLParser实例的委托属性设置为您的视图控制器,则您的视图控制器将知道解析器何时解析内容完成工作。换句话说,一旦解析器子类告诉委托完成了操作,视图控制器可以使用一个填充的数据模型。
作为旁注,委托是OS X应用程序(特别是苹果API)中广泛使用的几种设计模式之一。在进行iPhone开发时,您可能会发现并利用到各个地方的委托。
如果您不想使用委托,则另一个选择是实现观察者模式,从NSNotificationCenter发出通知到观察者,当它们收到通知时调用它们的选择器(方法)。通知相对于委托的优势在于可以有很多对象监听通知,而在给定时间内通常只能有一个对象成为委托。

@Alex Reynolds - 这是非常棒的信息。我想我会尝试使用委托路线。我已经看到一些初始化类(在这种情况下,NSXMLParser)的示例,例如创建一个initWithCustomObject方法,并传入我想要用来填充视图的对象。然后当解析完成时,我将使用该对象来填充视图上的UI元素。这是最好的方法吗? - Mark Struzinski

0

你可以创建一个单例类,来管理所有共享的操作。你可以在这里找到一个快速创建单例对象的教程。


0

我会将解析操作放在一个NSOperation中,放在操作队列中。这样它就可以在后台线程上执行(注意,在NSOperation的异步操作中,您必须进行一些额外的工作才能使其发生)。

当所有解析完成时,将结果存储在其他控制器可以看到的地方,并发出对象已准备好的通知。您还可以为错误条件发出通知,以便等待加载完成的控制器知道他们永远不会得到对象。

您也可以像Alex所说的那样使用委托,但通知通常更灵活,因为您可以让几个不同的对象对负载做出反应。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接