iOS:保存到文件在emulator上有效,但在设备上无效

iOS:保存到文件在emulator上有效,但在设备上无效,ios,file-io,Ios,File Io,我的应用程序将用户信息/首选项的加密数据写入文件,并在下次打开应用程序时读取该文件 写入文件: - (BOOL)writeFile:(NSString *)data:(NSString *)fileName { return [data writeToFile:fileName atomically:YES encoding:NSUTF8StringEncoding error:nil]; } - (NSString *)

我的应用程序将用户信息/首选项的加密数据写入文件,并在下次打开应用程序时读取该文件

写入文件:

- (BOOL)writeFile:(NSString *)data:(NSString *)fileName {
  return [data writeToFile:fileName
                atomically:YES
                  encoding:NSUTF8StringEncoding error:nil];
}
- (NSString *)readFile:(NSString *)fileName {
  NSData *data = [NSData dataWithContentsOfFile:fileName];
  NSString *str = [[[NSString alloc] initWithData:data
                                         encoding:NSUTF8StringEncoding] autorelease];
  return str;
}
读取文件:

- (BOOL)writeFile:(NSString *)data:(NSString *)fileName {
  return [data writeToFile:fileName
                atomically:YES
                  encoding:NSUTF8StringEncoding error:nil];
}
- (NSString *)readFile:(NSString *)fileName {
  NSData *data = [NSData dataWithContentsOfFile:fileName];
  NSString *str = [[[NSString alloc] initWithData:data
                                         encoding:NSUTF8StringEncoding] autorelease];
  return str;
}

这在模拟器上运行良好。文件按预期写入和读取。是否需要为设备上的文件读/写设置文件?

文件名必须位于文档目录中。模拟器不会像设备那样对写入文件的位置有太多限制

按如下方式获取文档目录:

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"myfilename.extension"];

将此传递到上面的函数中,您应该会很好

您作为
fileName
传递的是什么?正如@jrturton所说,您要向哪个文件写入?如果它不在应用程序的目录中,实际设备将不允许它,但可能模拟器允许它?@Kevin我无法为应用程序创建自己的文件?@dee您可以创建自己的文件,但它必须在应用程序的目录中。如果您只是传递没有目录的名称,它将(可能)写入用户的主页而不是那里。