Я пытаюсь просто загрузить изображение из хранилища 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
В приведенном выше вопросе автор вопроса устранил проблему, обновившись до 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!");
}];
Я совершенно не знаю, что делать дальше. Кто-нибудь испытывал что-то подобное или есть какие-нибудь советы?
Я ценю любую обратную связь, которая может помочь! Спасибо!





Сначала импортируйте это
#import "UIImageView+FirebaseStorage.h"
а затем для загрузки изображения из ссылки используйте это
FIRStorageReference *gsReference = [[self.storageRef child:self.detailItem.faction] child:[self.detailItem firebaseEntry]];
[yourImage sd_setImageWithStorageReference:gsReference placeholderImage:nil];
Я решил проблему, создав новый ViewController, чтобы делать то же самое с нуля. К сожалению, я не знаю, в чем заключалась исходная проблема и как ее воспроизвести. Мой оригинальный ViewController был максимально простым. Проблема выглядела как странный сбой / недостаток в API, xcode или эмуляторе, поскольку ошибок не было, и она исправилась в новом ViewController с использованием того же точного кода.
Все остальное, что я видел в Интернете, указывает на проблему, связанную с Firebase 3.6.0 и ниже. Убедитесь, что вы используете последнюю версию Firebase, а затем воссоздайте тот же ViewController, и ваша проблема, скорее всего, будет решена.
если у вас есть сомнения относительно этого кода, спросите меня, я помогу вам