【问题标题】:How to let a view controller know it should fetch data from the server? [closed]如何让视图控制器知道它应该从服务器获取数据? [关闭]
【发布时间】:2016-04-15 07:59:27
【问题描述】:

我正在尝试找到通知视图控制器它应该根据另一个视图控制器的操作从服务器获取数据的正确方法。

例如 - 呈现推文列表的视图控制器,以及允许用户创建推文的视图控制器。用户创建推文后,负责创建推文的视图控制器将被关闭,而负责呈现推文的视图控制器现在应该知道它应该从服务器重新加载它的数据,以便向用户展示他刚刚创建的推文。

一开始我以为NSNotificationCenter是要走的路,但做了一点研究(主要是this twitter discussion),发现建议在视图的viewDidDisappear方法中去掉通知观察者控制器,在上面描述的场景中,使通知无用,因为 呈现 视图控制器在它应该收到通知的时候已经从通知的观察者中移除了自己(因为它被隐藏了'create tweet' 视图控制器,从而导致它的 viewDidDisappear 方法被调用)。

这里的委托也是一个问题,因为可能还有其他视图控制器也可能需要知道何时创建了新推文,以便更新他们的视图/从服务器获取数据等。

由于所描述的流程非常流行,我认为必须有一个正确的方式让这两个视图控制器以一种有意义的方式进行通信。

有什么想法吗?

【问题讨论】:

  • 你可以在dealloc方法中移除观察者
  • 会不会是NSNotificationCenter的错误使用?有没有可能出现的潜在问题?
  • 除非业务逻辑,否则我认为没有任何犯罪行为。
  • 您可以使用 KVO、通知或委托;为方便起见,您可以在两者之间进行选择。

标签: ios objective-c xcode swift cocoa-touch


【解决方案1】:

您可以在数据/网络模型中设置标志。 假设您有一个包含服务器请求的TweetNetworking.swift 文件,您可以添加一个var needFeedRefresh: BOOL

然后,只需在需要时将其设置为 true,在刷新提要后将其设置为 false。 然后,您可以在 viewWillAppear 中检查该变量。

如果需要定期刷新,另一种方法是将此变量键入NSDate,并在需要强制刷新时将其设置为NSDate(timeIntervalSince1970:0)

【讨论】:

    【解决方案2】:

    如果使用NSNotificationCenter 的唯一障碍是事实,即观察者在viewDidDisapper 中被删除,您可以将调用removeObserver 移动到deinit,假设您的观察者只是隐藏而不是释放。

    有关更多信息,请参阅:iOS8: Where To Remove Observer for NSNotification in Swift(与您提到的推文讨论由同一作者撰写的帖子)。

    【讨论】:

      【解决方案3】:

      当您显示另一个视图控制器以撰写推文时,您还可以在呈现视图控制器中添加通知侦听器。然后在回调中删除该侦听器;那么监听器将被尽快移除。

      func showTweetComposer() {
          NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(UIPresentingViewController.tweetComposed(_:)), name: UITweetComposeViewControllerDoneKey, object: nil)
      }
      
      func tweetComposed(notification: NSNotification) {
          NSNotificationCenter.defaultCenter().removeObserver(self, name:notification.name, object: nil)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        • 1970-01-01
        • 2014-04-11
        相关资源
        最近更新 更多