2012-02-02 13 views
0

私はいくつかのリストのセットを含むアプリケーションに取り組んでいます。これらには多くのアイテムが含まれ、さらに多くのアイテムが含まれます。これを保存して、docsディレクトリのPListとの間でロードしたいのですが、私が探している階層にデータを書き込む方法がわかりません。これは階層です:階層としてPlistにデータを書き込む

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

私はNSDictionaryのWRITETOFILEを使用してみましたが、私はまだ、このような階層構造を持っているのか分かりません。

この種のものを読み書きする方法についてのいくつかの指針を教えてください。私は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

あなたがオブジェクトの配列を持っている限り私が見ることができるようになり、ここで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]; 
0

別のNSDictionaryをルート内の値として設定することで、このような階層を構築できます。 、PLISTに自動的にエンコードすることができるオブジェクトタイプはNSStringNSDataNSDateある

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

:だから、このコードは...

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

...このようなルートオブジェクトを生成しますNSNumber,NSArrayおよびNSDictionaryAPI参照)。

関連する問題