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]

代わりは。

また、2 つのコメント:

url != nil && [url isFileURL]

非常に余分です。

[url isFileURL]

NOとにかく、URL が次の場合に返されますnil(メッセージングnilは​​常にゼロを返すため)。

二:

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

車輪を再発明しないでください/パスセパレーターを推測しようとします. この行

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