【问题标题】:iPhone :: Objective-C - Loading a list of Images from Restful Webservice into UITableViewiPhone :: Objective-C - 将来自 Restful Webservice 的图像列表加载到 UITableView
【发布时间】:2011-09-22 23:57:16
【问题描述】:

大家好,

我已经实现了上述机制(在问题标题中),它是这样工作的:

  1. 创建一个 NSURLConnection 并调用我的 json 网络服务以获取记录列表以及每条记录的图像 URL。
  2. 在 connectionDidFinishLoading 委托中,我将返回的记录设置为我的 NSArray 并使用 NSArray 重新加载我的 UITableView,但此时我不加载图像。
  3. 在同一个 connectionDidFinishLoading 委托中,对于检索到的每条记录,我都会触发单独的连接以获取图像数据。假设我从之前的 json web 服务返回了 5 条记录,我将触发 5 次 GET 请求来获取每条记录的图像数据。
  4. 那么这一次,在 connectionDidFinishLoading 委托中,我会知道这一次它是从获取图像数据的请求中触发的,我会将图像数据设置到我的 UITableView 数据源的 NSArray 中并执行 reloadData。对于 5 条记录,表格将被重新加载 5 次。
  5. 只有当我不重新加载我的 NSArray 的最后 2 个元素时,一切似乎都可以正常工作,否则,我会遇到 exc_bad_access 异常。

感谢您的善意建议。这可能是一种愚蠢的做法。

:)

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    你描述你在做什么的方式看起来不错。您可以使用 reloadRowsAtIndexPaths 来更新每个单元格,因为它的图像被接收到,而不是整个表。

    Here's a stack overflow question that may be helpful。搜索延迟加载将为您提供更多示例。

    我认为使用 Core Data 是正确的方法,因为它允许您使用 NSFetchedResultsController 为您处理所有表维护。最初,您使用具有 nil 图像路径属性的对象加载表,因此您的 cellForRowAtIndexPath 可以显示占位符(或不显示)。当您获得返回的图像(异步)时,您将图像写入本地存储并使用应该为该记录显示的图像路径更新 Core Data。当您对核心数据进行更改时,您会在获取的结果控制器上执行 performFetch,并且您的表格会正确显示。如果您关注Apple's sample code,您甚至不需要在桌子上使用 reloadData。

    【讨论】:

    • 感谢您的意见!一定会尝试的! :)
    • 感谢延迟加载的信息,但我的问题与加载无关,这是我在第一次加载时将图像占位符初始化为 UIImage 时犯了一点内存分配错误. :)
    • 我已经按照您的建议使用 reloadRowsAtIndexPaths 方法来避免整个 tableView 的 reloadData。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    相关资源
    最近更新 更多