1

我对这个问题发疯了,但我认为答案比预期的要容易。我有这样的课:

@protocol Messagge @end

@interface Messagge : JSONModel

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

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

我将此类用于 NSMutableArray 中的对象,我从 Web 服务下载为 json。在像这样的另一个类中:

@interface AnswerMessages : AJSONModelSubClass

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

- (...) methods....

initFromURLWithString:并且在 AnswerMessages 上使用 JSONModel 方法下载数组似乎一切正常。

但我需要改变,我无法让它发挥作用。

为了方便起见,我对 NSMutableArray 进行了子类化,并且因为我需要添加方法和委托(我使用了一个类别,但现在还不够)所以我创建了这个类:

@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'

所以我尝试了一些改变,但没有奏效。

有什么帮助吗?

提前致谢

4

1 回答 1

1

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

简而言之JSONModel,并没有真正测试过可以与 的子类一起使用NSArray,因此如果您只使用 anNSArray来代替它可能会更容易。当然,如果列表中没有太多项目,ConvertOnDemand 将不适用于自定义类(您也可以尝试跳过“ConvertOnDemand”)。

希望这对您有所帮助!

于 2013-09-24T08:10:30.247 回答