Я создаю песочницу OS X app (OS X 10.10.5, Xcode 6.4). В ходе выполнения я открываю объект NSOpenPanel. Тогда я бегу следующий фрагмент кода:NSOpenPanel в песочнице app игнорирует предоставленный каталог URL
NSString* s=[@"~" stringByExpandingTildeInPath];
NSOpenPanel* panel = [NSOpenPanel openPanel];
[panel setCanChooseDirectories:YES];
[panel setCanChooseFiles:NO];
NSURL* url=[NSURL fileURLWithPath:s];
if(url){
[panel setDirectoryURL:url];
}
[panel setAllowsMultipleSelection:YES];
[panel beginSheetModalForWindow:[self.outlineView window]completionHandler:^(NSInteger result) {}
Я ожидаю, что панель открывается в каталоге /Users/xxx/Library/Containers/com.123456.App/
Вместо что панель открывается в каталоге /Пользователи/ххх
Применение фактически построен и развернут в каталог /Users/xxx/Library/Containers/com.123456.App/Data/
При отладке я замечаю, что на данный момент:
if(url){
[panel setDirectoryURL:url];
}
URL-адрес содержит правильное значение: файл: ///Users/xxx/Library/Containers/com.123456.App/Data/
Любая идея?
Да, у меня есть причина и согласно рекомендациям Apple Я ДОЛЖЕН использовать NSOpenPanel, если я хочу просматривать каталоги – Boris
Правильно, но использование NSOpenPanel для просмотра контейнера вашего приложения не имеет смысла. Пользовательские данные не должны храниться в контейнере, а только внутренние файлы вашего приложения, к которым пользователь не должен обращаться напрямую. Независимо от того, существует ли какая-либо разница, если вы используете 'NSURL * url = [NSURL fileURLWithPath: NSHomeDirectory()];' –
@Boris - вам нужно использовать только 'NSOpenPanel', чтобы пользователь предоставил вам доступ к файлам, которые ваше приложение еще не делает иметь доступ к. Доступ к файлам в вашем контейнере можно получить напрямую, и вы можете найти содержимое каталога, используя обычные API. – CRD