2012-02-02 3 views
0

나는 여러 세트의 목록을 포함하는 응용 프로그램을 만들고 있습니다. 여기에는 더 많은 항목이 포함될 많은 항목이 포함됩니다. 나는 이것을 저장하고 문서 디렉토리의 PList에서 /로로드하고 싶지만 내가 찾고있는 계층 구조에 데이터를 쓰는 방법을 잘 모르겠습니다. 이 계층 구조입니다 : 내가 NSDictionary에 writeToFile를 사용하여 시도계층으로 Plist에 데이터 쓰기

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

,하지만 난 여전히 계층 구조를 가지고하는 방법을 모르겠어요.

이런 종류의 것을 읽고 쓰는 방법에 대한 조언을 해주십시오. 나는이 plists의 사용에 완전히 새로운 것이므로 제발 참아주십시오.

건배,

HBhargava

답변

2

아마도 도움이 될 것입니다.

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

    NSString [email protected]"Name"; 
    NSString [email protected]"Age"; 
    NSString [email protected]"Khalid"; 
    NSString [email protected]"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

당신이 객체의 배열을 가지고 최대한 멀리 볼 수있다, 여기 문서 디렉토리에 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]; 
0

다른 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, (API 참조).

관련 문제