Объект подкласса возвращает ноль - Тайфун

Я использую Typhoon Framework для внедрения зависимостей в iOS.

У меня есть два класса: класс A и класс B. Класс B является подклассом класса A. Класс A является одиночным.

- (id)classAObject{
    return [TyphoonDefinition withClass:[ClassA class] configuration:^(TyphoonDefinition *definition){
            definition.scope = TyphoonScopeLazySingleton;
        }];
}

- (id)classBObject{
     return [TyphoonDefinition withParent:[self classAObject] class:[ClassB class] configuration:^(TyphoonDefinition *definition) {

}];
}

В классе B я наследую класс A.

@interface Class B: Class A{
}

всякий раз, когда я пытаюсь получить classBObject, я получаю ноль.

@interface classB:NSObject{
} 

Но когда я наследую от NSObject, я получаю значение.

что я здесь делаю неправильно?

Спасибо


person iPhone Guy    schedule 06.11.2016    source источник
comment
Это действительно странно, но я написал тот же код, и он работает   -  person Nikita Ermolenko    schedule 06.11.2016
comment
Можете ли вы показать код, где вы получаете классы из сборки   -  person Nikita Ermolenko    schedule 06.11.2016
comment
В классе C я пытаюсь получить доступ к классу B, id object = [_assembly classBObject]; // сборка не нулевая. Это помогает?   -  person iPhone Guy    schedule 06.11.2016
comment
Вы активировали сборку?   -  person Nikita Ermolenko    schedule 06.11.2016
comment
Я не активирую явно. Даже если я попытаюсь вот так, [_assembly enable];, я получаю сбой в этой строке [NSException raise:NSInvalidArgumentException format:@Нет компонента, соответствующего идентификатору '%@'., key]; //ключ активирован. Нужно ли активировать явно?   -  person iPhone Guy    schedule 06.11.2016
comment
Но как это работает, когда я создаю подкласс NSObject вместо класса A.   -  person iPhone Guy    schedule 06.11.2016
comment
Давайте продолжим это обсуждение в чате.   -  person Nikita Ermolenko    schedule 06.11.2016


Ответы (1)


В моем базовом классе я использовал следующий код, который вызывает проблему.

+ (id)allocWithZone:(NSZone *)zone { 
@synchronized(self) { 
if (sharedManager == nil) { 
sharedManager = [super allocWithZone:zone]; 
return sharedManager; // assignment and return on first allocation 
} 
} 
return nil; // on subsequent allocation attempts return nil 
}

Это сработало, когда я удалил приведенный выше код.

person iPhone Guy    schedule 06.11.2016