将可可转化为可可粉 -

时间:2012-03-09 16:02:26

标签: ios cocoa-touch cocoa

在过去的几个小时里,我一直在研究SNRLastFMEngine,这使得iOS友好,但已经停滞不前了。我的问题是在一个单独的函数中似乎只使用Mac OS的cocoa应用程序中提供的函数。

功能如下:

- (void)_registerCustomURLSchemeHandler
{
    // Register for Apple Events
    NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager];
    [em setEventHandler:self andSelector:@selector(getURL:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
    // Set Sonora as the default handler
    NSString *bundleID = [[NSBundle mainBundle] bundleIdentifier];
    LSSetDefaultHandlerForURLScheme((CFStringRef)kCustomURLScheme, (CFStringRef)bundleID);
}

其中kCustomURLScheme是预先定义的NSString

然后由函数- (void)getURL:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent

处理

我考虑过添加NSNotification观察者来处理事件,但没有运气(它不识别事件类或事件ID,我不知道该怎么做占LSSetDefaultHandlerForURLScheme)。我对Mac OS应用程序没有任何经验,我确信我错过了更大的图景。我非常感谢任何有这两种语言知识的人的帮助/指导。

1 个答案:

答案 0 :(得分:4)

在iOS中,您无法在运行时动态地向系统注册URL方案。

您告诉iOS您的应用可以通过使用CFBundleURLTypes属性将其列在Info.plist文件中来处理URL方案。 (可能在文件的Xcode显示中显示为“URL类型”)。

这意味着您在发布应用时预先声明了支持的方案列表,除非您提交较新版本的应用,否则无法更改。尝试更改Info.plist文件将无法正常工作,因为它会破坏文件的签名,iOS将拒绝运行它。