Запись данных в Plist как иерархия - PullRequest
0 голосов
/ 02 февраля 2012

Я работаю над приложением, которое содержит несколько наборов списков.Они будут содержать много предметов, которые, в свою очередь, будут содержать больше предметов.Я хочу сохранить и загрузить это в / из PList в каталоге docs, но я не уверен, как записать данные в иерархии, которую я ищу.Это иерархия:

>Lists
>>List1
>>>Item1
>>>>Item1Details
>>>Item2
>>>>Item2Details
>>>etc.
>>List2
>>>Item1
>>>>Item1Details
>>etc.

Я пытался использовать NSDictionary writeToFile, но я до сих пор не знаю, как создать такую ​​иерархию.

Пожалуйста, дайте мне несколько советов о том, как читать /написать такую ​​вещь.Я совершенно новичок в этом использовании списков, поэтому, пожалуйста, потерпите меня.

Приветствия,

HBhargava

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

Возможно, это вам поможет.

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"data.plist"];

    NSString Item1=@"Name";
    NSString Item2=@"Age";
    NSString Item1Detail=@"Khalid";
    NSString Item2Detail=@"21";


        NSMutableDictionary *_list1 = [[NSMutableDictionary alloc] init];
        NSMutableDictionary *_list2 = [[NSMutableDictionary alloc] init];

        [_list1 setValue:Item1Detail forKey:Item1];
        [_list1 setValue:Item2Detail forKey:Item2];

        [_list2 setValue:Item1Detail forKey:Item1];
        [_list2 setValue:Item2Detail forKey:Item2];

        NSMutableArray *_lists = [[NSMutableArray alloc] init];
        [_lists addObject:_list1];
        [_lists addObject:_list2];

        [_list1 release]
        [_list2 release];

        [_lists writeToFile:path atomically:YES];

        [_lists release];
0 голосов
/ 02 февраля 2012

Вы можете построить подобную иерархию, установив другой NSDictionary в качестве значения внутри корневого. Итак, этот код ...

NSMutableDictionary *root = [NSMutableDictionary dictionary];
NSMutableDictionary *child1 = [NSMutableDictionary dictionary];
NSMutableDictionary *child2 = [NSMutableDictionary dictionary];

[child1 setValue:@"leaf1" forKey:@"key1"];
[child1 setValue:@"leaf2" forKey:@"key2"];

[child2 setValue:@"leaf3" forKey:@"key3"];
[child2 setValue:@"leaf4" forKey:@"key4"];

[root setValue:child1 forKey:@"child1"];
[root setValue:child2 forKey:@"child2"];

... создаст корневой объект следующим образом:

{
   child1: {
      key1: leaf1
      key2: leaf2
   }
   child2: {
      key3: leaf3
      ley4: leaf4
   }
}

Типы объектов, которые могут быть автоматически закодированы в plist: NSString, NSData, NSDate, NSNumber, NSArray и NSDictionary (см. API ).

0 голосов
/ 02 февраля 2012

Насколько я вижу, у вас есть массивы объектов, вот код для записи массива в plist-файл в каталоге doc

    //look at this code which creates path to plist in documents directory:
    NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"data.plist"];
//    >Lists
//      >>List1
//          >>>Item1
//              >>>>Item1Details
//          >>>Item2
//              >>>>Item2Details
//          >>>etc.
//      >>List2
//          >>>Item1
//              >>>>Item1Details
//    >>etc.

    NSArray *list1Arry = [NSArray arrayWithObjects:@"item1Detail",@"item2Detail",@"item3Detail", nil];
    NSArray *list2Arry = [NSArray arrayWithObjects:@"item1Detail",@"item2Detail",@"item3Detail", nil];
    NSArray *list3Arry = [NSArray arrayWithObjects:@"item1Detail",@"item2Detail",@"item3Detail", nil];
    NSArray *lists = [NSArray arrayWithObjects:list1Arry,list2Arry,list3Arry, nil];
    [lists writeToFile: path atomically:YES];
...