Блок завершения FirebaseStorage не вызывается.Objective-C - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь просто загрузить картинку из хранилища Firebase в мое приложение IOS, но мой блок завершения не вызывается.

Сначала я использую TableViewController, который прекрасно загружает множество картинок.Когда я нажимаю на элемент в табличном представлении, он представляет простой контроллер представления модально.Я использую тот же код, который успешно загружает картинки в TableViewController. В этом модально представленном контроллере представления мои блоки завершения FirebaseStorage не выполняются. Когда я выхожу из этого контроллера представления, TableViewController по-прежнему может загружать изображения по мере необходимости по запросу.

Я включилрегистрируясь с -FIRAnalyticsDebugEnabled и до сих пор не получаю никаких ошибок в моем журнале.

Я разрешил все чтения и записи временно в моих правилах для FirebaseStorage.

Я видел этот вопрос iOS setValue withCompletionBlock не называется , который в комментариях гласит, что у определенной версии firebase была некоторая проблема с FirebaseDatabase, блокирующая некоторые другие блоки завершения.

В документации сказано «Исправлено условие гонки, при котором выполнялась транзакция или добавлениенаблюдатель событий сразу после подключения к службе базы данных Firebase Realtime может привести к тому, что блоки завершения для других операций не будут выполнены ».от https://firebase.google.com/support/release-notes/ios#3.6.0

В приведенном выше вопросе asker исправил проблему, обновив до 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

Я вошел в мой код и обнаружил, что мой код вызывается, но блок завершения никогда не выполняется.Я использую правильные дочерние идентификаторы, поэтому я знаю, что ссылка на хранилище существует.Я также знаю, что это не проблема с подключением, потому что другие картинки загружаются нормально всего за несколько секунд до этого.

- (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!");
    }];

Я полностью растерялся, что делать дальше.Кто-нибудь испытывал что-то подобное или у вас есть какие-либо советы?

Я ценю любые отзывы, которые могут помочь!Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Я решил проблему, создав новый ViewController, чтобы выполнить то же действие с нуля.К сожалению, я не знаю, в чем была изначальная проблема или как ее воспроизвести.Мой оригинал ViewController был как можно проще.Проблема выглядела как странный сбой / недостаток в API, xcode или эмуляторе, поскольку ошибок не было, и она исправила себя в новом ViewController, используя тот же самый точный код.

Все остальное, что я видел онлайн, указывалона вопрос, касающийся Firebase 3.6.0 и ниже.Убедитесь, что вы используете последнюю версию Firebase, а затем пересоздаете тот же ViewController, и ваша проблема, скорее всего, будет исправлена.

0 голосов
/ 23 мая 2018

Импортируйте сначала

#import "UIImageView+FirebaseStorage.h"

, а затем для загрузки изображения. Для справки используйте этот

FIRStorageReference *gsReference = [[self.storageRef child:self.detailItem.faction] child:[self.detailItem firebaseEntry]];        

[yourImage sd_setImageWithStorageReference:gsReference placeholderImage:nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...