Вот мой код:

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

По какой-то причине, когда я открываю файл из почтового приложения (или любого другого приложения, включая хорошую программу чтения) в своем приложении, он говорит, что он не читается. И очевидно, что файла не существует.

Есть идеи, почему это происходит?

1
objectiveccoder001 29 Янв 2013 в 19:50

1 ответ

Лучший ответ

Потому что 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"]
7
user529758user529758 29 Янв 2013 в 19:54
Добро пожаловать. Извлеченный урок: осознавайте общие вещи, прежде чем пытаться программировать.
 – 
user529758
29 Янв 2013 в 19:58