Читать содержимое вложенных NSMutableDictionaries? - PullRequest
0 голосов
/ 14 марта 2012

Кажется достаточно простым - я создаю один мастер NSMutableDic и заполняю его большим количеством из них.

Какой простой способ получить доступ к содержимому словаря, подобного этому? Хотя это и не Python, возможно, что-то вроде «taskDict [4] ['assignby']»?

Вот код, который работает отлично и денди:

int counter = 0;

NSArray *cols = [GetProjectInfo getTaskColumns];    
NSArray *rows = [GetProjectInfo fetchAll:projectName];

NSMutableDictionary *taskDict = [NSMutableDictionary dictionary];
NSMutableDictionary *localDict = [NSMutableDictionary dictionary];

for (int x=0; x < rows.count; x++) {

    NSString *rowData = [rows objectAtIndex:x];

    NSString *colData = [cols objectAtIndex:counter];

    //Assign the values colData(key) and rowData(value) into localDict.
    [localDict setValue:rowData forKey:colData];

    counter ++;

    if (counter >= cols.count) {

        counter = 0;

        //Add the whole localDict to the global dictionary (taskDict)
        [taskDict setObject:localDict forKey:localDict];

        //Reset the localDict so that we can populate it with the next set 
        [localDict removeAllObjects];
    }
}

NSLog(@"%@",taskDict);

возвращает что-то в размере:

            {
    person = "Ryan";
    assignedby = jfreund;
    complete = False;
    timeassigned = "15:35:00";
} =     {
};
    {
    person = "Tim";
    assignedby = klang;
    complete = True;
    timeassigned = "16:59:07";
} =     {
};

Кто-нибудь хочет поделиться некоторыми идеями в этом направлении?

1 Ответ

0 голосов
/ 14 марта 2012

Это не дает прямого ответа на ваш вопрос;но вместо того, чтобы хранить свой граф объектов как вложенные словари, не могли бы вы вместо этого использовать подклассы NSObject для инкапсуляции ваших данных, чтобы вам не приходилось обходить иерархии словарей?Например, (заметьте, я ничего не знаю о уровне модели вашего приложения ...) Не могли бы вы разбить концептуальную модель на объекты Project и Task, например,

@interface Task : NSObject <NSCoding>
{
    NSString *_name;
    NSString *_owner;
    NSString *_assignedBy;
    BOOL _complete;
    NSDate *_timeAssigned;
    //  etc.
}

А затем проекты, в свою очередь, составленыЗадач:

@interface Project : NSObject <NSCoding>
{
    NSString *_name;
    NSString *_dateStarted;
    NSMutableArray *_tasks;
    //  etc.
}

Это более объектно-ориентированный способ структурирования уровня модели приложения.В этом механизме нет ничего, что помешало бы вам сериализовать данные в plist, если ваши классы соответствуют протоколу NSCoding.

...