Где UIpplication handleOpenURL 'Возврат' точно? - PullRequest
1 голос
/ 23 января 2010

Я работаю над обработкой пользовательской схемы URL в приложении и пытаюсь разобраться:

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

Я передаю и успешно анализирую URL в NSDictionary в моем приложении, но мне интересно, "что теперь?" handleOpenURL возвращает BOOL, но к чему? Мне сложно отлаживать, так как я не понимаю, как запустить отладчик на устройстве при его запуске.

Все, что я знаю, это то, что applicationDidFinishLaunching завершается раньше, чем handleOpenURL, и кажется, что мой rootViewController находится на экране.

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // Load data
    [self initializeData]; 
    // Configure and show the window
    [window addSubview:[navigationController view]];    
    [window makeKeyAndVisible];
}

В любом случае, теперь у меня есть этот объект NSDictionary в моем appDelegate, как бы вы передали его rootViewController, чтобы он мог что-то с ним сделать в подробном представлении? Буду ли я звонить

[[navigationController topViewController] addItemWithDictionary:theDictionary];

перед параметром handleOpenURL return YES; Или я должен создать свойство NSDictionary в моем appDelegate, а затем после "Return YES;" получить его из моего rootViewController (или detailViewController - который еще не сработал). Если так, то в чем причина? Мне не ясно, куда направляются возвраты handleOpenUrl ... и какое значение они имеют для меня.

Спасибо!

Ответы [ 3 ]

1 голос
/ 23 января 2010

Взгляните на предложение здесь о didFinishLaunchingWithOptions

http://www.iphonedevsdk.com/forum/iphone-sdk-development/31742-handleopenurl-not-called.html

Есть несколько подходов, которые я использовал для передачи данных, и в зависимости от условий, которые я смешиваю.

  1. Сохраняйте глобальность вокруг, чтобы вам не приходилось беспокоиться о прохождении.

  2. Зарегистрируйте / опубликуйте свои данные, используя шаблон Observer с объектом Notification, используя центр уведомлений.

  3. Сохранить URL-адреса в NSUserDefaults (также словарь, но вам не нужно управлять им).

Недавно мне пришлось сделать нечто похожее на UIWebView и обработать фильтрацию некоторых данных URL. Мне пришлось создать подкласс WebViewCache и setSharedCache на NSURL. Я сильно подозреваю, что это применимо и к вашей проблеме, получая данные с помощью shouldStartLoadWithRequest.

1 голос
/ 23 января 2010

Полезный совет для отладки openurl из других приложений или мобильного сафари (не взломанного устройства) заключается в том, чтобы создать подкласс UIApplication и переопределить несколько недокументированных методов, извините, я не запоминаю имена случайно, но вы можете найти их на ericasadun.com, будет довольно очевидно.

когда вы запускаете приложение через xcode и нажимаете home springboard, процесс не прерывается, потому что он был запущен xcode (afaik), поэтому вы можете запускать другие приложения и вызывать openurl, оставаясь при этом подключенным к отладчику.

0 голосов
/ 23 января 2010

Я думаю, что, возможно, ответил на свой вопрос, но если у вас есть другие идеи, я бы хотел их услышать!

Мне кажется, мне нужно продолжить обработку в handleOpenURL и превратить словарь в объект, который затем добавляется в массив моего appDelegate, который rootViewController использует для построения своего табличного представления. Очевидно, что перед автоматическим заполнением массива необходимо определиться с проверкой и подтверждением со стороны пользователя. Я предполагаю, что это также произойдет в рамках handleOpenURL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...