0

次のコードを使用して、Twitter.app からツイートを送信しています。

NSPerformService(@"Tweet", [NSPasteboard generalPasteboard]);

ユーザーがtwitter.appを持っていない場合、カスタムメッセージを表示するために、次のエラーを処理するにはどうすればよいですか?
エラー

try catch を試しましたが、うまくいきません。ありがとう

4

1 に答える 1

3

それを取得[NSApp servicesMenu]して検索し、その名前のサービスが存在するかどうかを確認してから呼び出します。


例で更新:

NSUInteger itemIndex = [[[NSApp servicesMenu] itemArray] indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop){
    return [[(NSMenuItem*)obj title] isEqualToString:@"Tweet"];
}];
if (itemIndex != NSNotFound)
    NSPerformService(@"Tweet", [NSPasteboard generalPasteboard]);

更新 2:

上記は一般的なケースであり、ローカリゼーションとサービス メニューの更新時に問題があります。既知のアプリによって提供されるサービスの特定のケースについては-[NSWorkspace absolutePathForAppBundleWithIdentifier:]、既知のバンドル ID を持つアプリがシステムに存在するかどうかを確認するために、アプリが存在するかどうかを確認できます。

于 2012-04-29T18:25:22.070 に答える