Создание вложенного JSON в NSDictionary из CoreData

#ios #objective-c #json #core-data

#iOS #objective-c #json #core-данные

Вопрос:

Я не знаю, соответствует ли заголовок вопросу или нет, но если вы чувствуете, что в нем чего-то не хватает, пожалуйста, отредактируйте вопрос.
Я хочу отправить параметр в определенном формате, например, JSON в AFNeworking , чтобы сохранить данные на сервере.
У меня есть NSArray файл, в котором есть имя fetchedDX , и я загружаю его значениями из CoreData as, fetchedDX = [Diagnoses MR_findAllWithPredicate:predicate]; который получает правильные значения, поскольку я использую его количество в одном месте, и это дает мне правильное количество. Это жесткий NSDictionary, который я готовлю к отправке:

 NSDictionary *superBillData = @{
      @"appointmentID": @"ABC",
      @"patientID": @"ABC",
      @"createdBy": @"ABC",
      @"lastChangedBy": @"ABC",
      @"Diagnoses":@[
            @{
                @"Code":@"hello world",
                @"shortDescription": @"my@you.com"
            },
            @{
                @"Code":@"hello 2",
                @"shortDescription": @"Lorem Ipsum"
                },
            ]};
  

Здесь Diagnoses ключом является тот, который отправляет несколько объектов. Теперь у меня есть эти данные в fetchedDX массиве, который мне предоставили core data, но я не знаю, как сделать динамический, NSDictionary потому что этот массив может иметь количество, равное одному или нескольким единицам. Итак, на основе каждого значения я должен создать это:

 @{
  @"Code":@"hello world",
  @"shortDescription": @"my@you.com"
 }
  

Вот изображение моей сущности:
введите описание изображения здесь

Есть идеи, как этого можно достичь?

Комментарии:

1. Есть ли какая-либо взаимосвязь?

2. Сколько атрибутов имеет этот Diagnoses объект? Можете ли вы поделиться Diagnoses.h файлом?

3. @Adeel да, есть объект, который называется SuperBill , с которым он находится в отношениях «один ко многим» Diagnoses . В то время как superBill имеет значения, указанные выше Diagnoses в NSDictionary .

4. Я вижу и предполагаю, что Code и shortDescription являются атрибутами Diagnoses объекта, верно? Мне нужно подтвердить это, потому что вы будете использовать эти атрибуты, чтобы получить то, что вы хотите.

5. Да, это именно то, что есть. Code и shortDescription являются атрибутами Diagnoses .

Ответ №1:

Я предполагаю, что Code и shortDescription являются атрибутами вашей Diagnoses сущности. В Diagnoses.h объявите метод экземпляра - (NSDictionary *)dictionary; и сделайте это в своем Diagnoses.m файле.

 - (NSDictionary *)dictionary {

    NSArray *keys = @[@"Code", @"codeDescription"];
    NSDictionary *dict = [self dictionaryWithValuesForKeys:keys];

    return dict;
}
  

Затем, когда вы готовите словарь параметров, измените свой код на этот.

 NSMutableArray *diagnosesArray = [NSMutableArray array];

    for (Diagnoses *obejct in fetchedDX) {
        [diagnosesArray addObject:[obejct dictionary]];
    }

    NSDictionary *superBillData = @{
                                    @"appointmentID": @"ABC",
                                    @"patientID": @"ABC",
                                    @"createdBy": @"ABC",
                                    @"lastChangedBy": @"ABC",
                                    @"Diagnoses":diagnosesArray};
  

Комментарии:

1. это именно то, что я ищу, но, пожалуйста, просто скажите мне одну вещь, что это за класс Diagnoses.h ? Diagnoses CoreDataProperties.h или Diagnoses CoreDataClass.h потому что это то, для чего сгенерирован xcode, когда я создавал подклассы NSManagedObject.

2. А также в NSArray *keys = @[@"Code", @"shortDescription"]; есть поле связи с именем superBill . Я обновил свой вопрос.

3. Сделайте это в Diagnoses CoreDataClass.h .

4. Если вам нужно только Code и shortDescription , тогда этого будет достаточно. Я думаю, вам не нужно беспокоиться об отношениях.

5. Да, действительно, вам не нужно беспокоиться об отношениях с superBill . Вам нужны значения двух атрибутов вашей сущности, так что это все, что вам нужно сделать.