Iphone 将数据作为层次结构写入Plist
我正在开发一个包含多组列表的应用程序。这些将包含大量的项目,而这些项目又将包含更多的项目。我想将其保存并从docs目录中的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 &
>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];