NSMutableArray 子类的 JSONModel 类型不允许错误
Posted
技术标签:
【中文标题】NSMutableArray 子类的 JSONModel 类型不允许错误【英文标题】:JSONModel type not allowed error with NSMutableArray subclass 【发布时间】:2013-09-23 23:41:36 【问题描述】:这个问题我快疯了,但我认为答案比预期的要容易。 我有这样的课:
@protocol Messagge @end
@interface Messagge : JSONModel
@properties ..... ... ... ..
- (...) methods......
@end
我将此类用于 NSMutableArray 中的对象,我从 web 服务下载为 json。 在这样的另一个类中:
@interface AnswerMessages : AJSONModelSubClass
@property (strong,nonatomic) NSMutableArray<Messaggio, ConvertOnDemand> *messaggi;
- (...) methods....
在 AnswerMessages 上使用 JSONModel initFromURLWithString:
方法下载数组似乎一切正常。
但我需要进行更改,但我无法使其发挥作用。
为了方便起见,我将 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'
所以我尝试了一些更改,但没有成功。
有什么帮助吗?
提前致谢
【问题讨论】:
【参考方案1】:由于NSArray
和NSMutableArray
的性质,ConvertOnDemand 需要在后台使用不同的类(即,您声明一个 NSArray 属性,但如果您希望它仅在需要时将字典转换为模型,实际上将属性更改为另一个自定义类)。
简而言之,JSONModel
并没有经过真正的测试,可以与NSArray
的子类一起使用,因此如果您只使用NSArray
来代替它可能会更容易。当然,如果列表中没有太多项目,ConvertOnDemand 将不适用于自定义类(您也可以尝试跳过“ConvertOnDemand”)。
希望对您有所帮助!
【讨论】:
以上是关于NSMutableArray 子类的 JSONModel 类型不允许错误的主要内容,如果未能解决你的问题,请参考以下文章
Foundation框架中的动态数组:NSMutableArray
单元测试、STAssertThrows 和 NSExceptions