1

viewDidLoadで、私のアプリケーションは、次のようにアイテムarrayOfHaikuの配列である NSMutableArray を設定します。NSDictionary

 NSError *error;
 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1
 NSString *documentsDirectory = [paths objectAtIndex:0];
 NSString *path = [documentsDirectory stringByAppendingPathComponent:@"haiku.plist"];
 NSFileManager *fileManager = [NSFileManager defaultManager];
 if (![fileManager fileExistsAtPath: path])
 {
 NSString *bundle = [[NSBundle mainBundle] pathForResource:@"haiku" ofType:@"plist"];
 [fileManager copyItemAtPath:bundle toPath: path error:&error];
 }
 self.arrayOfHaiku = [[NSMutableArray alloc] initWithContentsOfFile: path];

アプリケーションの使用中に、ユーザーはアイテムを に追加しますself.arrayOfHaiku。今のところ、次のコードを に含めますviewDidUnload

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"haiku.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath: path])
{
    [self.arrayOfHaiku writeToFile:path atomically:YES];
}

ここに私の質問があります:

  1. 私のコードはviewDidUnload、 a) Documents フォルダーに配列を格納しているドキュメント (つまり、 でアクセスした配列viewDidLoad) を新しい拡張された配列で上書きするだけですか (これが私がやりたいことです)、それとも b) を追加しますか? Documentsフォルダーに既に保存されている配列に新しい拡張配列を追加して、繰り返しが2倍以上の長さの配列になってしまうのでしょうか?

  2. 答えが「b)」の場合、「a)」を行うには何を変更する必要がありますか?

  3. a) で私がやっているようにそれを行う方が良いですviewDidUnloadか、それとも b) ユーザーが項目を self.arrayOfHaiku に追加するたびにドキュメント フォルダ内の配列を展開する方が良いですか?

  4. 答えが「b)」の場合、「b)」を行うには何を変更する必要がありますか?

ご協力いただきありがとうございます。

4

1 に答える 1

2
  1. ファイルが存在する場合は上書きされ、存在しない場合は作成されます (オプション a)。

  2. それはすべてレコードの数に依存します。膨大な数がある場合、毎回それらを書き直すと費用がかかる可能性があります。それ以外の場合は、別のソリューションに目を向ける必要があります。viewDidUnloadアプリがバックグラウンドになっている場合など、特定の状況では起動しない可能性があるため、正直なところ使用はお勧めしません。

  3. 残念ながら、 のような辞書オブジェクトを使用して plist を「更新」する準備が整った関数はありませんwriteToFile:。NSFileHandler のfileHandleForUpdatingAtPath:関数を使用できますが、plist ファイルを手動で変更する必要があります (これは単純なプロセスではないと思います)。

個人的には、データ構造が非常に単純で、「オプション a」が高価なプロセスでない限り、Core Dataを使用することをお勧めします。

お役に立てれば。

于 2012-08-13T19:47:43.470 に答える