Вот мой код:
-(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 ответ
Потому что 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"]
Похожие вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].