1

这是我的代码:

-(BOOL)application:(UIApplication *)application
           openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication
        annotation:(id)annotation {

    if (url != nil && [url isFileURL]) {
        NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

        if ( [[NSFileManager defaultManager] isReadableFileAtPath:[url absoluteString]] ) {
            NSLog(@"READABLE!");
            [[NSFileManager defaultManager] copyItemAtPath:[url absoluteString] toPath:[documentsPath stringByAppendingString:@"/timecode.xml"] error:nil];
        } else {
            NSLog(@"NOT READABLE!");
        }

        BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[documentsPath stringByAppendingString:@"/timecode.xml"]];

        if (fileExists) {
            NSLog(@"THERE!");
        } else {
            NSLog(@"NOT THERE!");
        }
    }
}

出于某种原因,当我从邮件应用程序(或任何其他应用程序,包括良好的阅读器)打开一个文件到我的应用程序时,它说它不可读。显然,该文件不存在。

任何想法为什么会发生这种情况?

4

1 回答 1

7

因为 URL 不是路径。

[url absoluteString]

好像

file:///var/mobile/XXXXXXXX/MyApp.app/Documents/foo.txt

你需要使用

[url path]

反而。

另外,有两条评论:

url != nil && [url isFileURL]

是非常多余的。

[url isFileURL]

NO如果 URL 是,无论如何都会返回nil(因为消息传递nil总是返回零)。

二:

[documentsPath stringByAppendingString:@"/timecode.xml"]

不要重新发明轮子/尝试猜测路径分隔符。这条线应该

[documentsPath stringByAppendingPathComponent:@"timecode.xml"]
于 2013-01-29T15:54:17.980 回答