【问题标题】:NSURLConnection MVC Best Practices [closed]NSURLConnection MVC 最佳实践 [关闭]
【发布时间】:2012-05-23 15:26:30
【问题描述】:

我正在尝试找出在我的应用程序中实现 MVC 设计的最佳方式。现在,当用户进入 UITableViewController 时,我向我的模型发送请求以访问互联网并下载一些数据。当数据返回时,我希望它更新数据,即使我的 UITableViewController 被释放(通过用户关闭视图或退出视图)。所以目前我更新模型,然后在模型上有一个委托来在 UITableViewController 上“更新 UI”。基本上在数据返回后,我希望模型调用 [tableView reloadData] 并通过委托来实现。

我的问题:

  1. 这一定是正确的方法吗?我的模型还有其他方法可以调用 UIViewController 上的方法吗?

  2. 如果我希望在更改该模型时通知多个 ViewController 怎么办...例如,如果我退出 UITableViewController1 然后导航到 UITableViewController2 并使用相同的模型/数据怎么办。我应该只在我的模型上创建多个委托吗?

只是在寻找一些最佳实践并想知道我是否正确地这样做了。

提前致谢。

【问题讨论】:

    标签: objective-c model-view-controller nsurlconnection


    【解决方案1】:

    您可以使用NSNotification 来提醒听众发生变化,或者使用Key-Value Observing (KVO)。两者都是Observer Pattern 的风格,这将帮助您消除模型与视图之间的耦合,并且作为奖励,允许任意数量的观察者了解您的模型的更改,而无需单独告诉他们。

    有自动和手动更改通知。 This explains the difference.

    我打赌你会手动通知,所以你会这样做:

    [self willChangeValueForKey:@"something"];
    ... // update 'something' here
    [self didChangeValueForKey:@"something"];
    

    观察者会收到通知。自动方法需要使用您可能不会在内部使用的属性方法。通常 KVO 适用于模型的单个属性,当然模型内可能有很多发送通知。如果你正在做更多类似“我刚刚完成流程 X”的事情,它可能更像是一个 NSNotification。

    【讨论】:

    • 对于KVO,在我解析web请求中的XML数据并更改我的模型后,它会自动通知注册更改通知的VC吗?那时如果模型是一个对象数组,我可以调用 tableView:insertRows:atIndexPaths?
    • 哎呀...格式化在 cmets 中效果不佳。我更新了响应以添加一些关于手动/自动 KVO 的信息。
    【解决方案2】:

    回答问题 2 - 如果您有一些对象,应该通知某些事件,您应该使用 NSNotifications(观察者模式)。这可以帮助您以简单的方式使这些对象做出反应、更新它们的视图等

    【讨论】:

    • 我了解到使用 NSNotifications 会使应用程序非常难以管理。我们有大量的 HTTP 请求进出多个模型。这仍然是一个好主意还是应该与多个代表一起完成?这甚至可能吗?
    • 您可以查看here 了解它们之间的区别。据我所知,所有用通知编写的代码都可以用委托重写。在你的情况下,我认为通知会比委托更容易做到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2010-10-06
    • 2011-10-28
    • 2010-09-10
    • 2011-10-11
    相关资源
    最近更新 更多