从收到的URL中创建NSNotification
对象。iOS应用程序可以接收和处理URL请求。使用application:openURL:sourceApplication:annotation:
方法要求iOS应用程序代理打开由URL标识的资源。此机制通常用于允许应用程序通过自定义协议相互通信。
但是,如何将URL消息转换为应用程序中的操作?CCFURLResponder
允许开发者注册一个或多个它可以处理的URL模式,并将这些模式转换为可以发布到NSNotificationCenter
的NSNotification
对象。
目前,CCFURLResponder
知道如何处理4种路径组件,即s:YourKeyName
),因为模式匹配的值将作为该密钥名下的值插入到NSNotification
userInfo字典中。明白了吗?
模式/l:(animal)MyAnimalDomainKey/s:MyAnimalNameKey/f:MyAverageWeightKey
将与形式为ccfurlresponder://animal/platypus/8.0
的URL匹配
模式/s:MyColorNameKey/f:MyRedKey/f:MyGreenKey/f:MyBlueKey
将匹配类似ccfurlresponder://Pure%20red/1.0/0.0/0.0
的URL
在应用程序的生命周期早期注册模式,例如这样
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSError *error = nil;
NSString *pattern = @"l:(animal)CCFAnimalDomain/s:CCFAnimal/f:CCFAverageWeight/i:CCFAverageLifeExpectancy";
if( ![CCFURLResponder registerSchemeWithPattern:pattern forNotificationName:@"CCFAnimalNotification" error:&error] )
NSLog(@"%s - error registering pattern %@,%@",__FUNCTION__,error, error.userInfo);
// register another pattern
pattern = @"l:(color)CCFColorDomain/s:CCFEnglishWord/s:CCFFrenchWord";
if( ![CCFURLResponder registerSchemeWithPattern:pattern forNotificationName:@"CCFColorNotification" error:&error] )
NSLog(@"%s - error registering pattern %@,%@",__FUNCTION__,error, error.userInfo);
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if( !url ) { return NO; }
// bail quickly if this is just ccfurlresponder://open
if( [[url host] isEqualToString:@"open"] )
return YES;
if( [[url scheme] isEqualToString:@"ccfurlresponder"] ) {
[CCFURLResponder processURL:url];
}
return YES;
}
请注意,这些示例假定您的应用程序已注册了URL方案“ccfurlresponder”。您在Xcode的目标中设置此方案。
最好的方法是下载仓库并构建示例应用程序,该应用程序包含一些可点击的链接的网页视图。您可以检查HTML文件test_doc.html
以了解URL的格式。
接下来,查看应用程序代理以了解我们如何注册URL模式和路由传入请求。
最后,主视图控制器CCFViewController
展示了如何响应该生成的NSNotification
消息。
当您注册一个模式时,我们不会检查冲突。第一个模式获胜。我们迟早会解决这个问题。或者您可以帮助我们。此外,这可能在 Mac OS 上工作;只是还没有进行测试。