【问题标题】:How to obtain data directly from PFFile without warning如何在没有警告的情况下直接从 PFFile 获取数据
【发布时间】:2015-02-25 17:25:21
【问题描述】:

我正在使用 PFFile 来存储图像。如果图像已经下载,我想直接访问它。如果没有,我想使用后台方法。但是,如果我使用getData,我会收到以下警告:

Warning: A long-running operation is being executed on the main thread. 
 Break on warnBlockingOperationOnMainThread() to debug.

因为我知道数据可用,所以这个警告是不必要的,而且会弄乱我的日志。有什么方法可以在不触发警告的情况下访问 PFFile 的数据?

【问题讨论】:

    标签: parse-platform pffile


    【解决方案1】:

    您收到警告是因为数据在本地可用,而 getData 是从服务器获取数据的同步调用。调用 getData 时,它会阻塞主线程 - UI - 并停止所有应用程序交互,直到数据下载,这就是您收到错误的原因。通常,非常不赞成阻止 UI 执行后台操作(例如下载)。

    我会使用 PFFile 的 isDataAvailable 属性来检查数据是否在本地可用。如果不是,请使用getDataInBackgroundWithBlock: 在后台获取数据。您可以使用该调用提供的完成方法来更新您的 imageView。

    更新 - 您还可以将 getData 调用包装在 dispatch_async 块中,这会将操作移至另一个线程,从而将其从主线程中删除并消除警告。

    【讨论】:

    • 您好,感谢您的回答。但是,我已经在检查 isDataAvailable,并且可以看到 getData 的调用实际上并没有使用网络。正如我在上面已经解释的那样:即使没有必要,我也会收到此警告。
    • 我仍然会使用getDataInBackground。这是做你正在做的事情的标准方法。即使数据在本地缓存,异步加载图像也会提高性能。要么这样,要么将每个 getData 调用包装在一个 dispatch_async 块中。无论哪种方式,在您取消主线程的调用之前,该警告都不会消失。
    • 我也很想使用 getDataInBackground。但是,在这种特殊情况下,我不能:我使用 PFFiles 下载图像并且必须在某些时候显示它们。由于我使用框架进行显示,因此无法使用 Parse 的 PFImage。如果我使用 getDataInBackground,在实际显示图像之前会有明显的闪烁。我可以围绕 PFFile 构建一个小型缓存,但这似乎很愚蠢,因为 Parse 已经为我做了缓存 - 因此我的问题是。
    • 我试过 dispatch_async 并且它有效。您介意编辑您的答案并在那里提及 dispatch_async,以便我可以接受它作为正确答案吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多