2016-01-27 87 views
2

我嘗試使用iOS的JSONModel框架從我的自定義對象中創建JSON文件。我得到的錯誤:使用JSONModel序列化自定義對象

-[JSONModel.m:1077] EXCEPTION: Invalid type in JSON write (RegisterBuyerDataOption) 
-[JSONModel.m:1077] EXCEPTION: Invalid type in JSON write (RegisterBuyerDataOption) 
-[JSONModel.m:1077] EXCEPTION: Invalid type in JSON write (RegisterBuyerData) 

registerBuyerData.h

@interface RegisterBuyerData : JSONModel 


@property (nonatomic, strong) NSString    *buyerDataID; 
@property (nonatomic  ) RegisterBuyerDataType type; 
@property (nonatomic, strong) NSString<Optional>    *title; 
@property (nonatomic  ) BOOL     required; 
@property (nonatomic, strong) NSString    *value; 
@property (nonatomic)   NSNumber<Optional>    *price; 
@property (nonatomic)   NSNumber<Optional>    *availability; 

@property (nonatomic, strong) NSArray<RegisterBuyerData*>    *fields; //array of more RegisterBuyerData 
@property (nonatomic, strong) NSArray<RegisterBuyerDataOption*>  *options; //key,value array for dropDown 

@property (nonatomic, strong) NSArray         *parentValue; 
@property (nonatomic, strong) NSArray<RegisterBuyerData*>    *children; //array of more RegisterBuyerData but only for special selected value of an options field 

- (BOOL) isAvailableForUser; 

@end 

registerBuyerData.m

@implementation RegisterBuyerData 

- (BOOL) isAvailableForUser{ 

    return (!_availability || [_availability integerValue] > 0); 
} 


+(JSONKeyMapper*)keyMapper 
{ 
    return [[JSONKeyMapper alloc] initWithDictionary:@{@"id": @"buyerDataID",@"value": @"value"}]; 
} 

@end 

RegisterBuyerDataOption.h

@interface RegisterBuyerDataOption : JSONModel 

@property (nonatomic, strong) NSString *key; 
@property (nonatomic, strong) NSString *value; 
@property (nonatomic, strong) NSNumber *price; 
@property (nonatomic, strong) NSNumber *availability; 

- (BOOL) isAvailableForUser; 

@end 

是沒可能創建一個JSON字符串遞歸?當我調用toJSONString方法時,我得到這些錯誤。

回答

3
@property (nonatomic, strong) NSArray<RegisterBuyerData*> *fields; 

應該

@property (nonatomic, strong) NSArray<RegisterBuyerData> *fields; 

因此擺脫多餘*,然後再試一次。

編輯:

哦,我明白了。看起來你還沒有宣佈你想要作爲協議級聯的類型。所以,做以下

RegisterBuyerDataOption.h

@protocol RegisterBuyerDataOption @end; 

@interface RegisterBuyerDataOption : JSONModel 

@property (nonatomic, strong) NSString *key; 
@property (nonatomic, strong) NSString *value; 
@property (nonatomic, strong) NSNumber *price; 
@property (nonatomic, strong) NSNumber *availability; 

- (BOOL) isAvailableForUser; 

@end 

registerBuyerData.h

@protocol RegisterBuyerData @end; 

@interface RegisterBuyerData : JSONModel 


@property (nonatomic, strong) NSString    *buyerDataID; 
@property (nonatomic  ) RegisterBuyerDataType type; 
@property (nonatomic, strong) NSString<Optional>    *title; 
@property (nonatomic  ) BOOL     required; 
@property (nonatomic, strong) NSString    *value; 
@property (nonatomic)   NSNumber<Optional>    *price; 
@property (nonatomic)   NSNumber<Optional>    *availability; 

@property (nonatomic, strong) NSArray<RegisterBuyerData*>    *fields; //array of more RegisterBuyerData 
@property (nonatomic, strong) NSArray<RegisterBuyerDataOption*>  *options; //key,value array for dropDown 

@property (nonatomic, strong) NSArray         *parentValue; 
@property (nonatomic, strong) NSArray<RegisterBuyerData*>    *children; //array of more RegisterBuyerData but only for special selected value of an options field 

- (BOOL) isAvailableForUser; 

@end 
+0

我試過,但Xcode中不想再建:類型參數 'RegisterBuyerData' 必須是指針(需要'*') – tuvok

+0

@tuvok請參閱編輯。 –

+0

thx,這是問題所在。我添加了@protocol RegisterBuyerData @end;並在沒有指針的情況下將數組類型更改爲NSArray 。 – tuvok

相關問題