在iphone中打开文件系统报出不可读

在iphone应用中打开文件,NSFileManager isReadableFileAtPath 返回 NO
代码:

-(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!");
        }
    }
}

不知为啥如果我从邮箱应用(还有一些其他应用)打开文件到我自己的文件,系统就会提示不可读。

这是由于URL不是一个路径

[url absoluteString]

比如:

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

你需要使用:

[url path]

还有,两个注释:

url != nil && [url isFileURL]

非常多余

[url isFileURL]

如果URL是nil,就会返回NO

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

不要重新发明,试试拆分路径分隔符,这行应该是这样的:

[documentsPath stringByAppendingPathComponent:@"timecode.xml"]