iOS Obj C Typhoon Автоматическая вставка в представление

У меня есть приложение для iOS с DI (Тайфун). В сборке я написал это:

- (AvPlayerManager *)playerManager {
return [TyphoonDefinition withClass:[AvPlayerManager class]
                      configuration:^(TyphoonDefinition *definition)
        {
            definition.scope = TyphoonScopeSingleton;
        }]; }

Я могу использовать этот класс AvPlayerManager в ViewControllerA.h с автоматической инъекцией: @property (nonatomic, weak) InjectedClass(AvPlayerManager) playerManager; У меня есть collectionView, и я хочу использовать playerManager в ячейках. Но если я попытаюсь использовать макрос инъекции класса, свойство будет нулевым.

My UI:

viewControllerA -> collectionView -> collectionViewCell

Как я могу использовать этот экземпляр singleton в collectionViewCell.m?


person leximester    schedule 21.01.2021    source источник


Ответы (1)


Если я правильно понимаю ваш вопрос, вы хотели бы объявить, что вы внедрили зависимости в частном порядке в реализации (.m), а не в заголовке?

Способ сделать это — использовать расширение класса внутри файла реализации, например:

Мой файл.m

@interface AudioManager() // or whatever your class is called in .h

@property (nonatomic, weak) InjectedClass(AvPlayerManager) playerManager; 

@end

//rest of .m implementation follows. 

Кстати, если вы будете использовать Swift в будущем, возможно, вы захотите проверить преемника Swift от Typhoon, который называется pilgrim.ph< /а>.

Если я правильно понял ваш вопрос, отлично, в противном случае не могли бы вы уточнить.

person Jasper Blues    schedule 21.01.2021
comment
Привет, спасибо за ответ. Извините, если мой вопрос был недостаточно ясен. Поэтому я отредактировал свой вопрос. - person leximester; 22.01.2021
comment
Вы почти наверняка не хотите этого делать. Вместо этого у вас есть класс AudioManager, который знает, как воспроизводить источник. Когда ячейка нажимается, она уведомляет аудиоменеджера (например, через контроллер представления), что звук должен воспроизводиться сейчас. . . если вы уверены, что хотите, поскольку вы создаете ячейку через VC или представление, вы можете просто передать ее в качестве аргумента инициализатора. . Вы видели пример приложения Typhoon? - person Jasper Blues; 23.01.2021