我尝试使用以下代码将一些文本附加到位于应用程序包中的文件中:
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;
}
这在模拟器上工作正常,但是,当我重新启动应用程序时,旧文件被加载,没有附加文本。我不知道这是怎么可能的。
有谁知道我如何更改此类别以便更改是持久的?
提前致谢! :)
答案 0 :(得分:4)
您无法写入应用包。
(顺便说一下,出于非常明显的安全原因。)
如果您打算更改文件,请将其复制到可写位置,例如在Documents目录中。
(哦,在你问之前:模拟器使用OS X的文件系统,这里没有这个限制,这就是它在模拟器上工作的原因。模拟器无法模拟的另一件事。)
答案 1 :(得分:2)
应用程序包是只读的。在修改文件之前,您需要将文件复制到应用程序的Documents目录。