I have implemented following JsonModels.
@interface MainModel : JSONModel
@property (nonatomic) NSArray<CCLSecurityChecklistModel *> *cclSecurityChecklist;
@end
@interface CCLSecurityChecklistModel : JSONModel
@property (nonatomic) NSString *section;
@property (nonatomic) NSString *location;
@property (nonatomic) NSString *nfc;
@property (nonatomic) NSArray <ContentModel *> *content;
@end
@interface ContentModel : JSONModel
@property (nonatomic) NSString *question;
@property (nonatomic) NSString *type;
@property (nonatomic) NSString *required;
@property (nonatomic) NSString *extra;
@property (nonatomic) NSArray *choices;
@property (strong, nonatomic) AnswerModel *answer;
@end
Here is my Json.
{"cclSecurityChecklist" :[
{
"section": "Security Checklist - CTSG (1)",
"location": "",
"nfc": true,
"content": [
{
"question": "",
"type": "checkbox",
"required": true,
"extra": true,
"choices": ["Exits/ Entrances", "Air in-take shafts", "Bicycle Parking Area", "Dustbin area near entrance", "Subway Area",
"Concourse", "Lifts", "Non-lockable compartments along passage way (both paid & unpaid areas)", "Fire equipment cabinets",
"Emergency Exits", "Doors leading to controlled area/non-public area are locked", "Staircase landings", "Platforms",
"End of platforms", "Seating area"],
"answer": {
"value": [],
"photos": [],
"remarks": []
}
}
]
},
{
"section": "Security Checklist - CTSG (2)",
"location": "Concourse - public area",
"nfc": true,
"content": [
{
"question": "",
"type": "checkbox",
"required": true,
"extra": true,
"choices": ["AED - a)Housing Cabinet in good condition. b)Signage is intact and displayed. c) glass piece for key pocket is not broken.d) key is present. e) Green light indication on the AED is blinking.e) Green light indication on the AED is blinking.e) Green light indication on the AED is blinking.e) Green light indication on the AED is blinking"],
"answer": {
"value": [],
"photos": [],
"remarks": []
}
}
]
}
]
}
Here is how I convert JsonString to MainModel in AppDelegate.
- (NSArray<CCLSecurityChecklistModel *> *)convertJsonToModel:(NSString *)fileName{
NSError *error;
NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSString * myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
MainModel *model= [[MainModel alloc] initWithString:myString error:&error];
return model.cclSecurityChecklist;
}
This is the result when I print out the MainModel.
<MainModel>
[cclSecurityChecklist]: (
{
content = (
{
answer = {
photos = (
);
remarks = (
);
value = (
);
};
choices = (
"Exits/ Entrances",
"Air in-take shafts",
"Bicycle Parking Area",
"Dustbin area near entrance",
"Subway Area",
Concourse,
Lifts,
"Non-lockable compartments along passage way (both paid & unpaid areas)",
"Fire equipment cabinets",
"Emergency Exits",
"Doors leading to controlled area/non-public area are locked",
"Staircase landings",
Platforms,
"End of platforms",
"Seating area"
);
extra = 1;
question = "";
required = 1;
type = checkbox;
}
);
location = "";
nfc = 1;
section = "Security Checklist - CTSG (1)";
},
{
content = (
{
answer = {
photos = (
);
remarks = (
);
value = (
);
};
choices = (
"AED - a)Housing Cabinet in good condition. b)Signage is intact and displayed. c) glass piece for key pocket is not broken.d) key is present. e) Green light indication on the AED is blinking.e) Green light indication on the AED is blinking.e) Green light indication on the AED is blinking.e) Green light indication on the AED is blinking"
);
extra = 1;
question = "";
required = 1;
type = checkbox;
}
);
location = "Concourse - public area";
nfc = 1;
section = "Security Checklist - CTSG (2)";
}
)
</MainModel>
Here is retrieving data from JsonModel's Object in other ViewController.
But I got this error when I retrieving content from CCLSecurityChecklistModel's object.
-[__NSDictionaryI content]: unrecognized selector sent to instance 0x6000000f3280
This my very first time of using JsonModel Mapper. Can anyone suggest me and help me for this issue. I was stuck here. Sorry for long explanations.