2015-11-03 5 views
0

Я реализую приложение NSApplicationDelegate: openFiles, чтобы получить определенное поведение для определенных документов. Для некоторых документов я хочу, чтобы поведение по умолчанию (которое только открывается и отображает их). Таким образом, после сортировки документов я называю для каждого документа:NSDocumentController openDocumentWithContentsOfURL: display: completeHandler: fail

[[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:[NSURL URLWithString:camDoc] display:YES completionHandler:^(NSDocument *document, BOOL alreadyOpen, NSError *error){ 
    NSLog(@"%@",document); 
}]; 

В консоли регистрируется следующее сообщение об ошибке:

*** setObjectForKey: key cannot be nil 

Обработчик завершения никогда не вызывается. Если я прокомментирую полный метод openFiles, то документы будут открыты нормально, поэтому класс NSDocument будет реализован правильно.

Я попытался временно отключить песочницу, поскольку метод делегата получает NSStrings не URL, поэтому я ожидал, что это может быть проблемой. Это не помогло.

Что здесь общего не работает?

Вопрос с бонусом: Как я могу получить URL-адрес, связанный с областью действия, который будет открыт приложением (из Finder)?

ответ

0

Оказалось, что проблема связана с тем, как создается NSURL. Разумеется, это должно было использовать методы fileURL.

+0

Можете ли вы объяснить, что вы имеете в виду? – stone

+0

Я использовал 'URLWithString', в то время как это должно было быть' fileURLWithPath'. –

+0

Как выглядит это утверждение в Swift? – johnrubythecat