0

以下の方法を使用して、plist から配列を取得し、特定の値を 1 増やして保存します。ただし、配列をログに記録すると、値が実際に毎回上がるわけではありません。

私のplistには配列があり、その数値ではそれぞれが0に設定されています。したがって、これを再度実行するたびに0に戻るようです。

NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *finalPath = [path stringByAppendingPathComponent:@"Words.plist"];

    NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];
    NSMutableArray *errors = [dict objectForKey:[NSString stringWithFormat:@"Errors%d.%d", [[stageSelectionTable indexPathForSelectedRow] section] +1, [[stageSelectionTable indexPathForSelectedRow] row] +1]];

    int a = [[errors objectAtIndex:wordIndexPath] intValue];
    a += 1;
    NSNumber *b = [NSNumber numberWithInt:a];
    [errors replaceObjectAtIndex:wordIndexPath withObject:b];

    [errors writeToFile:finalPath atomically:YES];
4

2 に答える 2

4

ドキュメントフォルダー内のファイルにのみ書き込むことができます。バンドルに書き込めません!

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

を使用NSFilemanagerして、Plist ファイルをドキュメント フォルダーにコピーできます。


ファイルのパスを取得するには:

- (NSString *)filePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"MyFile.plist"];
    return filePath;
}

ファイルが存在しない場合にファイルをコピーするには:

NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:[self filePath]]) {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"MyFile" ofType:@"plist"];
    [fileManager copyItemAtPath:path toPath:[self filePath] error:nil];
}

NSDictionaryこれで、Documents-Directory に書き込むことができます:

[dict writeToFile:[self filePath] atomically:YES];

しかし、あなたは本当に辞書の配列を更新する必要があります!

于 2012-06-15T18:12:18.113 に答える
2

配列の元の辞書ではなく、配列をディスクに書き込んでいます。

[dict writeToFile:finalPath atomically:YES];

Errors%d.%dまた、オブジェクトを保存する前に、オブジェクトを更新されたものに置き換える必要があります。

[dict setObject:errors forKey:/* your formatted key*/];

最後に、@ mavrick3 が指摘したように、ファイルをバンドルに保存することはできず、アプリケーションのドキュメント ディレクトリにのみ保存します。

于 2012-06-15T18:08:58.610 に答える