使用NSMutableArray子类时,JSONModel类型不允许出错

时间:2013-09-23 23:41:36

标签: objective-c xcode json nsmutablearray jsonmodel

我对这个问题感到很疯狂,但我认为答案比预期的要容易。 我有一个这样的课:

@protocol Messagge @end

@interface Messagge : JSONModel

@properties ..... ... ... ..

- (...) methods......
@end

我将此类用于NSMutableArray中的对象,我从webservice下载为json。 在另一个这样的课程中:

@interface AnswerMessages : AJSONModelSubClass

@property (strong,nonatomic) NSMutableArray<Messaggio, ConvertOnDemand> *messaggi;

- (...) methods....

并且在AnswerMessages上使用JSONModel initFromURLWithString:方法下载数组时,一切似乎都能正常工作。

但我需要改变,我无法使其发挥作用。

我为了方便而继承了NSMutableArray,因为我需要添加方法和委托(我使用了一个类别,但现在还不够)所以我创建了这个classe:

@protocol MessaggesDelegate <NSObject>

@required

- (...) delegateMethods......

@end

@protocol Messagges <Messagge,ConvertOnDemand> @end

@interface Messagges : NSMutableArray <Messagge, ConvertOnDemand>

- (....) methods....

@end

并尝试像这样更改AnswerMessages类:

@interface AnswerMessages : AJSONModelSubClass

@property (strong,nonatomic) Messaggi *messaggi;

- (...) methods.....

但现在当我使用initFromURLWithString:应用终止时因为:

*** Terminating app due to uncaught exception 'Type not allowed', reason: 'Messagges type not supported for AnswerMessages.messagges'

所以我尝试了一些改动但没有改变。

任何帮助?

提前致谢

1 个答案:

答案 0 :(得分:1)

由于NSArrayNSMutableArray的性质,ConvertOnDemand需要在场景后面使用不同的类(即,您声明了NSArray属性,但是如果您希望它只在它们将字典转换为模型时是必需的它实际上将属性更改为另一个自定义类。)

简而言之JSONModel并未真正经过测试才能使用NSArray的子类,因此如果您只使用NSArray,它可能会更容易。当然,如果列表中没有太多项目,ConvertOnDemand将无法使用自定义类(您也可以尝试跳过“ConvertOnDemand”)。

希望这有任何帮助!