【发布时间】:2012-05-09 14:41:25
【问题描述】:
我正在使用以下代码通过 Twitter.app 发送推文:
NSPerformService(@"Tweet", [NSPasteboard generalPasteboard]);
如果用户没有 twitter.app,我该如何处理以下错误以显示自定义消息?
我试过 try catch 但它不起作用。 谢谢
【问题讨论】:
标签: objective-c xcode macos twitter
我正在使用以下代码通过 Twitter.app 发送推文:
NSPerformService(@"Tweet", [NSPasteboard generalPasteboard]);
如果用户没有 twitter.app,我该如何处理以下错误以显示自定义消息?
我试过 try catch 但它不起作用。 谢谢
【问题讨论】:
标签: objective-c xcode macos twitter
您尝试获取[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 的应用。
【讨论】:
-[NSWorkspace absolutePathForAppBundleWithIdentifier:] 按捆绑 ID 查找应用,以确定它是否在系统上。
NSWorkspace 检查捆绑 ID 获得了大部分功劳。