0

次のコードを使用して、アプリケーションバンドルに存在するファイルにテキストを追加しようとしています。

NSString *dotsStr = [NSString stringWithFormat:@"%i", dots];

NSString *path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%i_500", dots] ofType:@"txt"];
NSString *contents = [NSString stringWithContentsOfFile:path encoding:NSASCIIStringEncoding error:nil];

NSString *newpath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%i_50", dots] ofType:@"txt"];
[contents appendToFile:newpath encoding:NSASCIIStringEncoding];

ファイルに追加するときは、NSStringのカテゴリを使用しています。

- (BOOL) appendToFile:(NSString *)path encoding:(NSStringEncoding)enc;
{
    BOOL result = YES;
    NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:path];
    if (!fh)
    {
        [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil];
        fh = [NSFileHandle fileHandleForWritingAtPath:path];
    }
    if (!fh) return NO;
    @try {
        [fh seekToEndOfFile];
        [fh writeData:[self dataUsingEncoding:enc]];
    }
    @catch (NSException * e)
    {
        result = NO;
    }
    [fh closeFile];
    return result;
}

これはシミュレーターでは正常に機能していますが、アプリを再起動すると、テキストが追加されずに古いファイルが読み込まれます。これがどのように可能かわかりません。

変更が永続的になるようにこのカテゴリを変更する方法を知っている人はいますか?

前もって感謝します!:)

4

2 に答える 2

4

アプリバンドルに書き込むことはできません。

(ちなみに、セキュリティ上の理由から明らかです。)

ファイルを変更する場合は、ファイルを書き込み可能な場所(たとえば、Documentsディレクトリ)にコピーします。

(ああ、そしてあなたがそれを尋ねる前に:シミュレーターはこの制限が存在しないOS Xのファイルシステムを使用するので、それがシミュレーターで動作する理由です。シミュレーターがシミュレートできないもう1つのこと。)

于 2012-12-30T19:14:14.420 に答える
2

アプリケーションバンドルは読み取り専用です。ファイルを変更する前に、ファイルをアプリケーションのDocumentsディレクトリにコピーする必要があります。

于 2012-12-30T19:14:06.770 に答える