1

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. enter image description here

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.

Nyein Ei Ei Tun
  • 168
  • 2
  • 13

1 Answers1

0

Luckily I found the solution based on the hints from the above answers. I changed the Json format to this

[
{
    "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": []
                }
                }
                ]
}
]

and Changed the code for Converting Json to Model into this.

    - (NSArray<CCLSecurityChecklistModel *> *)convertJsonToModel:(NSString *)fileName{
    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:@"json"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    NSString * myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSMutableArray *yourArray = [CCLSecurityChecklistModel arrayOfModelsFromString:myString error:nil];
    MainModel *objCardData = [[MainModel alloc] init];
    objCardData.cclSecurityChecklist = yourArray;

    return objCardData.cclSecurityChecklist;
}

according to this answer. parse json using JsonModel

Thanks so much all for your time.

Nyein Ei Ei Tun
  • 168
  • 2
  • 13