2015-09-15 4 views
1

Я установил расширение для моего содержащего приложения.Вызов 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> 

Пожалуйста, дайте мне совет, я боролся с этой проблемой в течение нескольких дней. Спасибо большое!

+0

'application: openURL: sourceApplication: annotation:' обязательно следует вызывать при запуске приложения через схему URL. Вы уверены, что его не вызывают? Возможно, есть ошибка в коде анализа URL? –

ответ

0

У меня не хватает репутации комментировать, но

этот метод вызывается при попытке запустить его с расширением?

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
+0

Я отлаживаю его из журнала устройств, но он не вызывал приложение '- (BOOL): (UIApplication *) application handleOpenURL: (NSURL *) url' при запуске приложения. – KittenYang