Я написал приложение, которое можно вызвать как услугу (щелкнув правой кнопкой мыши файл в Finder и выбрав его, чтобы открыть его с моим приложением), но есть несколько нежелательных побочных эффектов, эффекты при этом.Связанные с службой «ошибки»
Пример целевой службы метода:
- (void)doSomething:(NSPasteboard *)pboard userData:(NSString *)userData error:(NSString **)error {
NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
NSLog(@"Selected file(s): %@", files);
[self.anotherWindow makeKeyAndOrderFront:self];
}
1) При запуске приложения таким образом (даже если он уже открыт в режиме отладки), я, кажется, не в состоянии получить доступ к другим окнам/управления из функции DoSomething , Вышеприведенная попытка показать «anotherWindow», например, не производит ошибок, но ничего не делает. Согласно трассировке стека, при проверке с -doSomething все компоненты gui имеют значения 0x0000000000000000, но приложение отображается и полностью функционально. Это только от -doSomething, что я не могу связаться с ними. «self» также имеет другое значение при проверке с -doSomething по сравнению с -applicationDidFinishLaunching. Я не уверен, как и почему -doSomething приобретает другое self/AppDelegate с неинициализированными компонентами.
По-видимому, исправлено [NSApp setServicesProvider: self];
2) Я не понимаю, как система решает, какая копия приложения запускается при вызове службы, но обычно не выбирает тот, который я хочу. У меня есть копия в/Debug, копия в/Release, копия на моем рабочем столе ... и если я удалю ее, она откроет файл вместо другого (какая-то резервная цепочка?). Как настроить службу (в коде или через .plist), чтобы открыть определенную версию/местоположение этого приложения? Но это dev-машина. Если я выпущу дистрибутив, который устанавливает в/Applications, мне действительно нужно беспокоиться об этом?
Я добавил NSAlerts к -doSomething и к -applicationDidFinishLaunching. Сначала запускается одно в -applicationDidFinishLaunching, и я вижу главное окно приложения (self.mainWindow). Затем появляется сообщение -doSomething и печатает, что self.mainWindow (null). Несмотря на то, что я могу видеть и взаимодействовать с ним. Is -doSomething не работает в одном экземпляре? – Eric