我找到了几段代码,描述了如何将数据写入用户的应用程序Documents文件夹。但是,当我在iPhone模拟器中尝试此操作时,不会创建任何文件。我打电话了
[NSFileManager isWritbleAtPath:<my document folder>]
并返回0(false)。我是否需要明确写入此文件夹,如果是,我该怎么做?
答案 0 :(得分:2)
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];
答案 1 :(得分:1)
NSLog(@"writable: %d", [[NSFileManager defaultManager] isWritableFileAtPath:NSHomeDirectory()]);
这会在控制台上打印1。
您的意思是调用方法isWritableAtPath还是isWritableFileAtPath?你的意思是在类本身或它的(默认)实例上调用它吗?
答案 2 :(得分:0)
感谢指点。因此,经过几个文档的辛苦工作后,我发现我做错了:尝试保存一个不是由NSDictionary,NSArray或NSString等基本数据类型组成的NSArray。我试图保存一个MPMediaItems数组(来自SDK 3.0 +中的MediaKit Framework)。
答案 3 :(得分:0)
对于写入NSBundle的文件,我遇到了一个小问题。我有一个要求,一旦应用程序启动,需要使用服务器更新文本文件,并且它与模拟器配合良好,但不适用于设备。我后来发现我们没有NSBundle的写权限。将文件从NSBundle复制到Documents目录并用于我的目的解决了我的问题。我用 :
[myPlistData writeToFile:fileName atomically:NO];