handleOpenURL не вызывается с использованием пользовательской схемы URL в iPhone OS - PullRequest
4 голосов
/ 03 июня 2010

Я успешно добавил свои собственные схемы URL в свое приложение. Приложение корректно запускается по схемам.

Теперь я хочу обработать входящие данные, но делегат не вызывается. Это универсальное приложение, и я добавил следующую функцию в оба AppDelegates:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    if (!url) {  return NO; }

    NSString *URLString = [url absoluteString];
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:NSLocalizedString(@"test message", nil) 
                          message:URLString
                          delegate:self 
                          cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];     
    [alert release];
    return YES;
}

Я тестирую с такой схемой, как: myapp: //appalarm.com … И ожидается, что это будет appalarm.com в URLString

Что с ним не так?

Спасибо за ваши ответы!

Ответы [ 3 ]

7 голосов
/ 01 сентября 2010

Я пытался уточнить в другой пост . Ответ Эшли Кларк верен лишь отчасти. В OS 4.0 вызывается handleOpenURL (по крайней мере, для файловых URL), и вы должны реализовать его для обработки вызовов открытых URL-адресов, когда приложение находится в фоновом режиме. Таким образом, открытие файла в обоих методах может открыть его дважды (если applicationDidFinishLaunchingWithOptions вернул YES, что и должно быть). Смотрите еще один пост .

5 голосов
/ 03 июня 2010

Если ваш делегат приложения реализовал applicationDidFinishLaunchingWithOptions:, тогда метод handleOpenURL: никогда не будет вызываться Посмотрите параметры, переданные через другой метод, чтобы определить, как ваше приложение было запущено и какое поведение вы должны реализовать.

1 голос
/ 03 июня 2014

Попробуйте свой код в функции ниже

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if (!url) {  return NO; }

    NSString *URLString = [url absoluteString];
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:NSLocalizedString(@"test message", nil) 
                          message:URLString
                          delegate:self 
                          cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];     
    [alert release];
    return YES;
}
...