Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将数据作为层次结构写入Plist_Iphone_Objective C_Ios4_Plist_Writetofile - Fatal编程技术网

Iphone 将数据作为层次结构写入Plist

Iphone 将数据作为层次结构写入Plist,iphone,objective-c,ios4,plist,writetofile,Iphone,Objective C,Ios4,Plist,Writetofile,我正在开发一个包含多组列表的应用程序。这些将包含大量的项目,而这些项目又将包含更多的项目。我想将其保存并从docs目录中的PList加载,但我不确定如何在我要查找的层次结构中写入数据。这是层次结构: >Lists >>List1 >>>Item1 >>>>Item1Details >>>Item2 >>>>Item2Details >>>etc. >>List2 &

我正在开发一个包含多组列表的应用程序。这些将包含大量的项目,而这些项目又将包含更多的项目。我想将其保存并从docs目录中的PList加载,但我不确定如何在我要查找的层次结构中写入数据。这是层次结构:

>Lists
>>List1
>>>Item1
>>>>Item1Details
>>>Item2
>>>>Item2Details
>>>etc.
>>List2
>>>Item1
>>>>Item1Details
>>etc.
我尝试过使用NSDictionary writeToFile,但我仍然不知道如何拥有这样的层次结构

请给我一些关于如何读/写这种东西的建议。我对plists的这种用法是完全陌生的,所以请容忍我

干杯


HBhargava

据我所知,您有对象数组,下面是将数组写入doc目录中的plist文件的代码

    //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];

您可以通过将另一个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
(请参阅)。

也许这会对您有所帮助

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];