В моем приложении OS X я хочу, чтобы пользователь мог редактировать изображения с соответствующими расширениями действий, установленными на его/ее Mac, например расширение разметки изображения, которое присутствует в Mail.app или TextEdit (для файлов RTFD с изображениями) - или инструмент восстановления Pixelmator, если он доступен. Насколько я помню, Apple объявляет на WWDC '14, для этого будет публичный API.
К сожалению, я не могу найти отправной пункт о том, как использовать расширения с точки зрения хост-приложения, ни документации, ни образцового кода.
Я выяснил, что вам нужно установить недокументированное свойство стиля NSSharingPicker на ненулевое значение, подобное этому:
- (IBAction)testSharingPicker:(id)sender
{
NSSharingServicePicker *picker = [[NSSharingServicePicker alloc] initWithItems:@[[self.listing.images.firstObject thumbImage]]];
[picker setValue:@(1) forKey:@"style"];
[picker setDelegate:self];
[picker showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMinYEdge];
}
Как только значение стиля установлено, вы знаете, что находитесь на правильном пути, потому что - (NSArray *)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker sharingServicesForItems:(NSArray *)items proposedSharingServices:(NSArray *)proposedServices
вызывается с расширениями для редактирования изображений, установленными в моей системе, вместо обычных расширений общего доступа.
Вам также необходимо реализовать недокументированный метод делегата:
- (BOOL)sharingServicePicker:(NSSharingServicePicker *)sharingService shouldShowForView:(NSView*) inView
{
return YES;
}
Но все же сборщик не появляется. Все, что я получаю, - это какая-то странная граница вокруг кнопки sender
.