将文件复制到文档目录会导致失败

时间:2011-03-06 15:52:00

标签: iphone objective-c ios directory documents

我最近开始玩iPhone文件系统,起初我在理解一些概念时遇到了一些麻烦,但我认为最终我让它们变得直接而流畅。

我的问题是,我正在尝试通过对文档目录实施application:openURL:sourceApplication:annotation:方法,从邮件应用程序(或使用我的应用程序支持的文件类型打开我的应用程序的任何应用程序)复制文件({{ 1}}),但我的应用程序似乎在执行此操作时失败。

我创建了一个NSDocumentDirectory,其中包含我的文件管理器在复制文件时返回的值(BOOL,其中newFilePath是我的文档目录),然后检查它,然后NSLog,如果有失败或成功,我总是失败。

为了找出我的Documents目录发生了什么我启用了文件共享,而不是看到我复制的文件,我得到一个收件箱文件夹,并在将该文件夹复制到桌面时,我看到我的文件在那里。为什么会这样?我怎样才能得到我想要的结果?

我在Apple文档中的某处读到,当[fileManager copyItenAtPath:filePath toPath:newFilePath error:&error];打开文件时,它会将其复制到收件箱文件夹,但很明显,我的应用程序没有使用UIDocumentInteractionController

提前感谢您,非常感谢您的帮助。


编辑在这里开始

这是我的原始代码:

UIDocumentInteractionController

这是使用该文件完成所有工作的类:

//AppDelegate.m
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication (NSString *)sourceApplication annotation:(id)annotation
{
    rootFolder.fileURLFromLaunch = url; //Passing the URL on to aproperty on a different class
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ApplicationDidOpenFile" object:nil]; // notifying that the URL was passed and a file was opened
    return YES;
}

}

我希望能更明确地设定内容。

2 个答案:

答案 0 :(得分:1)

您是否在实例化时将错误设置为null?如果你没有NSError指向的内存不会为NULL,那么你的逻辑就会被触发。

这样做:

NSError *error = NULL;

不是这个:

NSError *error;

答案 1 :(得分:1)

  

我收到一个收件箱文件夹,将该文件夹复制到桌面后,我看到我的文件在那里。为什么会这样?我怎样才能得到我想要的结果?

因为您的应用是沙盒的,并且无法访问不在其自己的目录中的文件。当用户告诉iOS他想要使用特定应用程序打开文件时,iOS会将该文件复制到收件箱目录中。


发布application:openURL:sourceApplication:annotation:的完整代码。
你的“我正在做这个和那个”并不是很有帮助,因为这个和那之间存在一个缺陷。你用你的话解释的算法是正确的,但你的实现中显然存在一个错误。

所以请发布此方法的完整代码。


编辑:我测试了代码的相关部分,它们似乎有效。

我会检查fileManager是不是零。这可以解释为什么你没有看到错误信息。