iOS用に作成している場合、アプリケーションバンドルに書き込むことができないため、同じplistファイルに実際に保存することはできません。
あなたができることの1つは、そのplistのコピーをアプリケーションのDocumentsフォルダに保存してから、すべてのデータが1つのファイルに統合されるように同じplistを変更することです。
いつでも元のplistをアプリケーションバンドルからロードし、NSArray
の変更可能なコピーを作成し、ユーザのオブジェクトを含むドキュメントフォルダから追加のplistをロードし、にコールしてNSMutableArray
に追加することができます。
NSArray
に別々に保管することもできますが、テーブルビューのデータソースのtableView:numberOfRowsInSection:
メソッドから[originalDataArray count] + [userDataArray count]
メソッドを返すことでテーブルビューに表示し、もちろんtableView:cellForRowAtIndexPath:
メソッドで適切なデータを使用することもできます。
EDIT:
ユーザーデータの保存について、あなたは必然のplistを書くことを心配する必要はありません。
NSArray
はNSCoding
プロトコルに準拠しているため、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;
}
が
ありがとうフィリペ、私は2つの別々の配列を持つことが最良の選択肢だと思います。元の配列では、Xcodeの.plistエディタで作成されました。私はコードでこの2番目の配列を作成する必要がありますが、ユーザーはデータを入力する人でしょうか?またはこれを行う簡単な方法はありますか?これは私の元の配列のようです:http://www.box.net/shared/static/8vrur2i4r28lphlyysg5.png – Jon