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 的文件系统,没有这个限制,所以这就是它在模拟器上工作的原因。模拟器无法模拟的另一件事。)

于 2012-12-30T19:14:14.420 回答
2

应用程序包是只读的。在修改文件之前,您需要将文件复制到应用程序的 Documents 目录。

于 2012-12-30T19:14:06.770 回答