Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 为什么NSFileManager不工作?_Cocoa_Nsfilemanager - Fatal编程技术网

Cocoa 为什么NSFileManager不工作?

Cocoa 为什么NSFileManager不工作?,cocoa,nsfilemanager,Cocoa,Nsfilemanager,我编写了一些代码,将一个文件(dbtemplate.sqlite)从应用程序包复制到库中。但是,库中没有显示任何文件,每次启动应用程序时,它都会记录复制模板的文本。控制台中没有显示任何错误。我做错了什么 NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:@"~/Library/AppSafe/database/db.sqlite"]) { [f

我编写了一些代码,将一个文件(dbtemplate.sqlite)从应用程序包复制到库中。但是,库中没有显示任何文件,每次启动应用程序时,它都会记录复制模板的文本。控制台中没有显示任何错误。我做错了什么

NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath:@"~/Library/AppSafe/database/db.sqlite"]) {

    [fileManager createDirectoryAtPath:@"~/Library/AppSafe/database" withIntermediateDirectories:YES attributes:nil error:nil];

    [fileManager copyItemAtPath:@"dbtemplate.sqlite" toPath:@"~/Library/AppSafe/database/db.sqlite" error:nil];
    NSLog(@"copied template");

}

我建议将文件保存在documents文件夹中,我不确定您是否可以将文件保存在library文件夹中。使用以下代码在“文档”文件夹中创建文件的路径:

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"];
只需检查它是否存在如下情况:

if (![fileManager fileExistsAtPath:path])

因此,最好将您的文件移动到documents文件夹。

我认为您的问题在于
copyItemAtPath:
,因为您给出的字符串不是正确的路径。使用类似于
[[NSBundle mainBundle]pathForResourceWithName:::
的方法获取资源的实际路径。另外,我不确定路径中的~是否受支持-您可能需要使用NSString的某些函数来扩展它。

如果我没记错的话,您必须将完整路径传递到
NSFileManager
方法中,并且使用波浪号前缀的路径将不起作用

因此,不要使用
@“~/Library/…”
,而是使用:

[@"~/Library/..." stringByExpandingTildeInPath]

或者,更可靠的方法是,向NSFileManager询问应用程序支持中相关文件夹的路径。打开沙箱后,硬编码路径可能/将(某些路径将,某些路径可能)中断。可以在库中的某些位置保存文件;这些文件是否比文件更合适取决于文件的用途。(文档仅用于用户创建的内容。)无论哪种方式,将路径装订在一起都是一种不推荐的方法。正确的解决方案是向NSFileManager对象询问所需目录中的路径;在Mac OS X下运行沙盒时,NSFileManager将解锁您对该文件的访问权限,而手动路径则不会。