2012-09-22 3 views
2

Я использую NSSavePanel в своем приложении. Все отлично работает на моей ОС X 10.7, но приложение отклонено Apple со следующим комментарием:Правильный флаг права для сохранения файла в том же месте дважды

При экспорте во второй раз ранее выбранное место сохранения не работает. Пользователь должен отменить выбор местоположения, а затем снова выбрать его, чтобы записать файл. Убедитесь, что у вас есть необходимые права.

Этот отзыв был выполнен на iMac, работающем под управлением ОС X 10.8.

Это мой сохранить код панели:

NSSavePanel *savePanel = [NSSavePanel savePanel]; 
[savePanel setAllowedFileTypes:[NSArray arrayWithObject:@"mov"]]; 
[savePanel setDirectoryURL:[NSURL URLWithString:@"/Documents"]]; 
[savePanel setNameFieldStringValue: videoName]; 

[savePanel beginSheetModalForWindow:window completionHandler:^(NSInteger result){ 
    if (result == NSFileHandlingPanelOKButton) { 
     NSError *error = nil; 
     NSString *sourceFilePath = [NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath], videoName]; 
     NSString *destFilePath = [[savePanel URL] path]; 
     NSFileManager *fileManager = [[NSFileManager alloc] init]; 
     if(![fileManager copyItemAtPath:sourceFilePath toPath:destFilePath error:&error]) 
      NSLog(@"%@", error); 
    } 
}]; 

В настоящее время я использую эти флаги:

<dict> 
    <key>com.apple.security.app-sandbox</key> 
    <true/> 
    <key>com.apple.security.assets.movies.read-write</key> 
    <true/> 
    <key>com.apple.security.files.downloads.read-write</key> 
    <true/> 
    <key>com.apple.security.files.user-selected.read-write</key> 
    <true/> 
</dict> 

Что право флаг я должен использовать, чтобы решить эту проблему?

+0

Таким образом, каждый раз, когда пользователь хочет «экспорт», они выбирают сохранить местоположение с помощью nssavepanel правильно? – mark

+0

Да, Марк, они выбирают место сохранения через nssavepanel. – DioNNiS

ответ

1

Если вы говорите о сбережении дважды в одном и том же прогоне своего приложения, не должно быть никаких прав; как только пользователь выбирает файл из NSSavePanel, он находится в изолированной программной среде вашего приложения. То же самое относится, если панель сохранения отображается как раз - она ​​должна «просто работать». Если это одно и то же место между последовательными запусками, без сохранения панели во второй раз, вам нужно сохранить закладку с областью безопасности в файл.

Для примера смотрите примеры кода, приведенные в данном вопросе (и поправки к нему в принятом ответ): App Sandbox: document-scoped bookmark not resolving; not returning any error

+0

Спасибо, Дов, но я постоянно показываю NSSavePanel. – DioNNiS

+0

Можете ли вы сохранить тот же файл дважды, когда вы запустите в Lion? Если да, возможно ли, чтобы вы бежали на Горном льве, так как именно так его проверяют? Возможно, файл заблокирован перед второй записью из-за изменения API. Если он работает в первый раз, я сомневаюсь, что он имеет какое-либо отношение к правам, несмотря на то, что, возможно, предложила группа по обзору приложений. И если вы не можете воспроизвести его, то, возможно, комментарии команды обзора приложения не приведут нас к правильному выводу. – Dov

+0

Я видел ряд ситуаций, когда команда обзора давала вводящую в заблуждение информацию по той причине, которую они отвергают. – mark