我发现了几个描述如何将数据写入用户应用程序文档文件夹的代码片段。但是,当我在 iPhone 模拟器中尝试这个时,没有创建任何文件。我打了电话
[NSFileManager isWritbleAtPath:<my document folder>]
它返回 0(假)。我是否需要使该文件夹显式可写,如果需要,我该怎么做?
我发现了几个描述如何将数据写入用户应用程序文档文件夹的代码片段。但是,当我在 iPhone 模拟器中尝试这个时,没有创建任何文件。我打了电话
[NSFileManager isWritbleAtPath:<my document folder>]
它返回 0(假)。我是否需要使该文件夹显式可写,如果需要,我该怎么做?
iPhone 模拟器应该能够写入整个磁盘。我的应用程序会定期将测试文件转储到启动卷的根级别(使用[NSData's writeToPath:@"/test.jpg" atomically:NO]
)。
您确定您已正确确定文档文件夹的路径吗?您需要扩展路径中的波浪号。这是我的应用程序用于将内容放入文档文件夹的代码。我不认为有任何更多的设置涉及!
brushesDir = [[@"~/Documents/BrushPacks/" stringByExpandingTildeInPath] retain];
// create brush packs folder if it does not exist
if (![[NSFileManager defaultManager] fileExistsAtPath: brushesDir])
[[NSFileManager defaultManager] createDirectoryAtPath:brushesDir withIntermediateDirectories:YES attributes:nil error:nil];
NSLog(@"writable: %d", [[NSFileManager defaultManager] isWritableFileAtPath:NSHomeDirectory()]);
这会在控制台上打印 1。
您的意思是调用方法 isWritableAtPath 还是 isWritableFileAtPath ?你的意思是在类本身上调用它,还是在它的(默认)实例上调用它?
感谢您的指点。因此,在翻阅了一些文档之后,我发现我做错了:试图保存一个不是由基本数据类型(如 NSDictionary、NSArray 或 NSString)组成的 NSArray。我试图保存一组 MPMediaItems(来自 SDK 3.0+ 中的 MediaKit 框架)。
我在将文件写入 NSBundle 时遇到了一个小问题。我有一个要求,即应用程序启动后需要立即使用服务器更新文本文件,并且它在模拟器上运行良好,但在设备上运行良好。后来我发现我们没有 NSBundle 的写权限。将文件从 NSBundle 复制到 Documents 目录并用于我的目的解决了我的问题。我用 :
[myPlistData writeToFile:fileName atomically:NO];