Я установил расширение для моего содержащего приложения.Вызов openURL с виджета Today Today открывает приложение, но не вызывает приложение: openURL: sourceApplication: аннотация:
Вот код:
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];
}
Но странно то, что, если содержащий приложение не открыто (не загружается в память), Я коснусь ячейки из Today Extension, приложение откроется, но не может позвонить application:openURL:sourceApplication:annotation:
, поэтому он не будет нажимать на целевой диспетчер представлений. Но теперь приложение открыто (загружено в память), я коснусь ячейки из Today Extension, содержащее приложение вызовет 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? –