ios - 在 MVC 中获取和解析功能位置

标签 ios swift model-view-controller rss

我需要从 rss 加载数据并将其显示在 tableview 中。我决定在其他类中而不是在 ViewController 中执行此操作。所以我创建了 DataFetch 类。问题是我使用第三方库来处理 rss,它是这样工作的:

func fetchPodcastFeed() -> [RSSFeedItem]{
    let feedURL = NSURL(string: feedURLString)!
    var feedItems = [RSSFeedItem]()
    dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), {
        // Run parsing in a background thread
        FeedParser(URL: feedURL)?.parse({ (result) in
            feedItems = (result.rssFeed?.items)!
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
              //reload table

            })
        })
    })   
    return feedItems
}

当然,当我从 ViewController 调用 fetchItems = dataFetcher.fetchPodcastFeed() 时,我没有得到任何数据。我应该使用通知吗?如果是,如何通过它们将获取的数据传递给 ViewController?或者有更好的方法吗?

最佳答案

所以我假设 fetchPodcastFeed() 函数是您的代码,对吧? 然后我建议用这样的回调来定义它:

func fetchPodcastFeed(onCompletion:(result:[RSSFeedItem]) -> Void) {
    // setup as you have it ...
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                // call the completion closure
                onCompletion(feedItems)
            })
        })
    })
}

然后,无论您在哪里调用该方法,都按如下方式进行:

fetchPodcastFeed({(result) in
    // reload your table with result, which is of type [RSSFeedItem]
})

理论上,您也可以简单地将完成处理程序直接传递到您在 FeedParser 对象上调用的 parse 方法中,但是由于您在后台线程中,它可能明智的做法是先将其再次发送到主线程。否则,您必须将重新加载表的内容放在 dispatch_async 调用中,这比您开始的方式更好。

关于ios - 在 MVC 中获取和解析功能位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38131324/

相关文章:

ios - 如何以 00 :00:00 using AVFundation 格式打印音频时间

javascript - MVC架构如何应用于Web应用程序开发?

ios - 多个区域的 Swift 范围信标

ios - 连接 IBOutlet Xcode 4.4

ios - 快速重绘 View

ios - 如何在 swift 3 中调整字体大小以适应高度(而不是宽度)

ios - Protocol Buffers Swift 生成图像未找到

ios - 在运行时调整参数?

model-view-controller - 如何调试Uploadify?

ios - 如何根据 REST-ful API 的变化在 iOS 应用程序的 MVC 中创建动态模型?