【问题标题】:FirebaseStorage Completion block not called. Objective-C未调用 FirebaseStorage 完成块。 Objective-C
【发布时间】:2018-05-24 10:05:25
【问题描述】:

我试图简单地将图片从 firebase 存储加载到我的 IOS 应用程序中,但我的完成块没有被调用。

我最初使用 TableViewController 加载大量图片就可以了。当我单击 tableview 中的一个项目时,它会以模态方式呈现一个简单的视图控制器。我使用在 TableViewController 中成功加载图片的相同代码。 在这个模态显示的视图控制器中,我的 FirebaseStorage 完成块不执行。当我退出这个视图控制器时,TableViewController 仍然可以根据我的请求加载加载图片。

我已使用-FIRAnalyticsDebugEnabled 启用日志记录 并且在我的日志中仍然没有收到任何错误。

我已在 FirebaseStorage 的规则中临时允许所有读取和写入。

我已经看到这个问题 iOS setValue withCompletionBlock not called 在 cmets 中指出,特定版本的 firebase 在 FirebaseDatabase 阻塞其他一些完成块方面存在一些问题。

文档说“修复了在连接到 Firebase 实时数据库服务后立即执行事务或添加事件观察器可能导致其他操作无法执行的完成块的竞争条件。”来自https://firebase.google.com/support/release-notes/ios#3.6.0

在上述问题中,提问者通过升级到 Firebase 3.7.1 解决了问题,我使用的是 5.0.1

这是我正在使用的版本

Using Firebase (5.0.1)
Using FirebaseAnalytics (5.0.0)
Using FirebaseAuth (5.0.0)
Using FirebaseCore (5.0.1)
Using FirebaseDatabase (5.0.0)
Using FirebaseInstanceID (3.0.0)
Using FirebaseStorage (3.0.0)
Using GTMSessionFetcher (1.1.15)
Using GoogleToolboxForMac (2.1.4)
Using leveldb-library (1.20)
Using nanopb (0.3.8)
Generating Pods project

我已经记录了我的代码,发现我的代码正在被调用,但完成块从未执行。我正在使用正确的子 ID,所以我知道存储引用确实存在。我也知道这不是连接问题,因为其他图片在几秒钟前加载正常。

- (void)loadPicture {
    NSLog(@"Attempting to load picture");
    FIRStorageReference *ref = [[self.storageRef child:self.detailItem.faction] child:[self.detailItem firebaseEntry]];        
    [ref dataWithMaxSize:1024*1024 completion:^(NSData * _Nullable data, NSError * _Nullable error) {
        NSLog(@"Got a result!");
    }];

我完全不知道接下来要采取什么步骤。有没有人遇到过类似的事情或者有什么建议?

感谢任何可能有帮助的反馈!谢谢!

【问题讨论】:

    标签: objective-c firebase firebase-storage


    【解决方案1】:

    先导入这个

    #import "UIImageView+FirebaseStorage.h"
    

    然后从参考加载图像使用这个

    FIRStorageReference *gsReference = [[self.storageRef child:self.detailItem.faction] child:[self.detailItem firebaseEntry]];        
    
    [yourImage sd_setImageWithStorageReference:gsReference placeholderImage:nil];
    

    【讨论】:

    • 如果您对此代码有任何疑问,请咨询我,我会帮助您
    【解决方案2】:

    我已经通过创建一个新的ViewController 从头开始​​执行相同的操作来解决问题。不幸的是,我不知道最初的问题是什么或如何重现它。我原来的ViewController 尽可能简单。这个问题似乎是 API、xcode 或模拟器中的一个奇怪的故障/缺陷,因为没有出现任何错误,并且它使用相同的确切代码在新的 ViewController 中自行修复。

    我在网上看到的所有其他内容都指向涉及Firebase 3.6.0 及以下的问题。确保您使用的是最新的 Firebase 版本,然后重新创建相同的 ViewController,您的问题可能会得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多