2011-07-21 7 views
1

私のアプリに付属するデータで.plistを埋めました。plistに保存することについて質問があります

基本的には、他の配列や辞書を含む辞書の配列です。

私はこの配列からと私のアプリで使用する値は "コンピュータ"のように名前かもしれません。

私は、ユーザーが自分のアイテムを作成できるようにする機能を追加しています。これは、配列からロードするものから選択するのではなく、しかし、私はこのアイテムを同じ.plistに保存するか、各ユーザーごとに個別の.plistを作成する必要がありますか?

次に、標準の.plistとユーザーが作成した.plistの両方から情報をプルして1つのtableViewにロードするにはどうすればよいですか?

答えて

2

iOS用に作成している場合、アプリケーションバンドルに書き込むことができないため、同じplistファイルに実際に保存することはできません。
あなたができることの1つは、そのplistのコピーをアプリケーションのDocumentsフォルダに保存してから、すべてのデータが1つのファイルに統合されるように同じplistを変更することです。
いつでも元のplistをアプリケーションバンドルからロードし、NSArrayの変更可能なコピーを作成し、ユーザのオブジェクトを含むドキュメントフォルダから追加のplistをロードし、にコールしてNSMutableArrayに追加することができます。
NSArrayに別々に保管することもできますが、テーブルビューのデータソースのtableView:numberOfRowsInSection:メソッドから[originalDataArray count] + [userDataArray count]メソッドを返すことでテーブルビューに表示し、もちろんtableView:cellForRowAtIndexPath:メソッドで適切なデータを使用することもできます。

EDIT:

ユーザーデータの保存について、あなたは必然のplistを書くことを心配する必要はありません。
NSArrayNSCodingプロトコルに準拠しているため、NSDictionaryもあります。つまり、簡単に保存してNSKeyedArchiverクラスのようなものを使用してロードできます。

これは私の古いプロジェクトで、ユーザーが生成したデータを保持するNSMutableArrayを持っていて、それを保存してNSKeyedArchiver(簡略化して関連コードを表示するだけでした。私は)ちょうどIOSで始めていたので、それを行うための最良の方法ではないかもしれないとき年以上前に行わ:

- (BOOL) saveData 
{ 
    BOOL success = NO; 

    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO); 

    NSString *path = [[[pathList objectAtIndex:0] stringByAppendingPathComponent:@"data.txt"] stringByExpandingTildeInPath]; 

    success = [NSKeyedArchiver archiveRootObject:myArray toFile:path]; 
    //note: myArray is an NSMutableArray, could be an NSArray 

    return success; 
} 


- (BOOL) loadData 
{ 
    BOOL success = NO; 

    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO); 

    NSString *path = [[[pathList objectAtIndex:0] stringByAppendingPathComponent:@"data.txt"] stringByExpandingTildeInPath]; 

    if((myArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path])) 
    { 
     [myArray retain]; 
     success = YES; 
    } 
    else 
    { 
     myArray = [[NSMutableArray alloc] init]; 
     success = NO; 
    } 

    return success; 
} 
+0

ありがとうフィリペ、私は2つの別々の配列を持つことが最良の選択肢だと思います。元の配列では、Xcodeの.plistエディタで作成されました。私はコードでこの2番目の配列を作成する必要がありますが、ユーザーはデータを入力する人でしょうか?またはこれを行う簡単な方法はありますか?これは私の元の配列のようです:http://www.box.net/shared/static/8vrur2i4r28lphlyysg5.png – Jon

関連する問題