2015-09-12 5 views
1

Я растягиваю голову с двух дней, чтобы решить эту проблему.«Объявление протокола Bad property» при попытке инициализировать класс модели, который находится в рамках

Я создал универсальную фреймворк iOS, содержащий мои классы моделей, полученные из JSONModel. Например,

@protocol XYZ 
@end 

@interface XYZ : JSONModel 
@property(nonatomic,strong) NSString * name; 
@end 

Теперь, когда я использую этот «Framework» в другом проекте и попытаться инициализировать «XYZ» модель класса со словарем,

NSError* err = nil; 
XYZ * xyz = [[XYZ alloc] initWithDictionary:jsonDictionary error:&err]; 

он выходит из строя, говоря «декларации протокола Bad собственности» ,

Он работает нормально, если я не использую фреймворк и не помещаю этот класс модели непосредственно в свой проект. Не знаю, почему такое проводное поведение.

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

Просьба. Любая помощь будет принята с благодарностью. Заранее спасибо.

ответ

1

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

//few built-in transformations 
-(id)__transform:(id)value forProperty:(JSONModelClassProperty*)property error:(NSError**)err 
{ 
    Class protocolClass = NSClassFromString(property.protocol); 
    if (!protocolClass) { 

     //no other protocols on arrays and dictionaries 
     //except JSONModel classes 
     if ([value isKindOfClass:[NSArray class]]) { 
      @throw [NSException exceptionWithName:@"Bad property protocol declaration" 
             reason:[NSString stringWithFormat:@"<%@> is not allowed JSONModel property protocol, and not a JSONModel class.", property.protocol] 
            userInfo:nil]; 
     } 
     return value; 
    } 

    ........... 
} 

«protocolClass» был Nil и Ошибка.

Решение должно было просто добавить флаг «-Objc» в флаг других компоновщиков, чтобы классы могли загружаться из статической библиотеки во время выполнения, прежде чем они будут использоваться.

Надеюсь, что это поможет и другим.