Я установил расширение «Сегодня» для своего содержащего приложения.
Вот код:
TodayViewController:
[self.extensionContext openURL:[NSURL URLWithString:[NSString stringWithFormat:@"idaxiang://action=%ld",(long)aCell.tag]] completionHandler:^(BOOL success) {
NSLog(@"open url result:%d",success);}];
AppDelegate.m:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
NSString* prefix = @"idaxiang://action=";
if ([ElephantUtils originString:[url absoluteString] withTargetString:prefix]) {
if ([[url absoluteString] rangeOfString:prefix].location != NSNotFound) {
NSString* action = [[url absoluteString] substringFromIndex:prefix.length];
UINavigationController *navc = (UINavigationController *)application.keyWindow.rootViewController;
if (navc.viewControllers.count > 1) {
[navc popToRootViewControllerAnimated:NO];
}
ElephantHomeViewController *homeVC = (ElephantHomeViewController *)navc.topViewController;
[homeVC PushToSpecificArticle:[action integerValue]];
}
return [[Diplomat sharedInstance] handleOpenURL:url];
}
Но странно то, что если содержащее приложение не открыто (не загружается в память), я касаюсь ячейки из расширения «Сегодня», приложение откроется, но не сможет вызвать application:openURL:sourceApplication:annotation:
, поэтому оно не будет нажимать на целевой контроллер просмотра. Но теперь приложение открыто (загружено в память), я нажимаю на ячейку из расширения «Сегодня», содержащее приложение вызовет application:openURL:sourceApplication:annotation:
и успешно нажмет на целевой контроллер просмотра.
Вот мой info.plist:
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>com.smartisanelephant.www</string>
<key>CFBundleURLSchemes</key>
<array>
<string>idaxiang</string>
</array>
</dict>
Пожалуйста, дайте мне несколько советов, я боролся с этой проблемой в течение нескольких дней. Спасибо большое!
application:openURL:sourceApplication:annotation:
обязательно должен вызываться при запуске приложения через схему URL. Вы уверены, что он не вызывается? Возможно, в вашем коде анализа URL есть ошибка? - person Christopher Pickslay   schedule 16.09.2015