Я ищу решение (API и т. Д.) Для обработки аналогичного опыта, как cafepress.com , Мне нужно иметь возможность загружать изображения (желательно по нескольку за раз) и иметь возможность сопоставлять свои загруженные изображения с различными изображениями продуктов (чистые стоковые изображения рубашек, кружек и т. Д.). Я также хочу дать пользователю некоторые основные элементы управления загружаемыми ими изображениями, такие как обрезка, изменение размера, уровни и т. Д. Будем весьма благодарны за любые предложенные библиотеки или API. Я ищу .NET решения (если на стороне сервера). ...
Я реализовал
application:didFinishLaunchingWithOptions:
и
application:handleOpenURL:
UIApplicationDelegate в соответствии со спецификацией, т.е.
application:didFinishLaunchingWithOptions:
returns YES
и
application:handleOpenURL: opens the URL.
Код работает под iOS 4 (в обоих случаях, то есть когда приложение запускается и когда становится активным из приостановленного состояния). Тем не менее, код не работает под iOS 3.2.
Отвечаю на свой вопрос. Поиск решения занял у меня некоторое время и был довольно разочаровывающим. Если вы выполните поиск в Интернете, вы найдете некоторые частичные ответы, но мне все же потребовалось некоторое время, чтобы выработать следующее решение, и я надеюсь, что оно внесет некоторую ясность.
Итак, во-первых, рекомендуемое поведение вашего приложения выглядит следующим образом (см. Открытие поддерживаемых типов файлов в iOS Ref Lib):
applicationDidFinishLaunching:
( см. примечание в UIApplicationDelegate). application:didFinishLaunchingWithOptions:
и проверьте URL-адрес, верните YES, если вы можете его открыть, в противном случае NO, но не открывайте его. application:handleOpenURL:
и откройте URL-адрес, верните YES в случае успеха, иначе NO.В iOS 4 передача URL-адреса приложению приводит к одному из следующих двух вариантов поведения:
application:didFinishLaunchingWithOptions:
и application:handleOpenURL. :
вызывается, если и application:didFinishLaunchingWithOptions:
возвращает YES. application:didFinishLaunchingWithOptions:
не вызывается, но вызывается application:handleOpenURL:
. Однако в iOS 3.2 кажется, что application:handleOpenURL:
никогда не вызывается! Намек на то, что в iOS 3.2 поведение отличается, можно найти в Обработка запросов URL. Там вы обнаружите, что application:handleOpenURL:
вызывается, если application:didFinishLaunchingWithOptions:
не реализовано, но applicationDidFinishLaunching:
реализовано. Но application:handleOpenURL:
не вызывается, если реализовано application:didFinishLaunchingWithOptions:
.
Таким образом, одним из способов заставить код работать в версиях 3.2 и 4.0 является следующее:
application:didFinishLaunchingWithOptions:
, но затем верните NO, чтобы предотвратить это application:handleOpenURL:
называется. application:handleOpenURL:
, если вы используете версию ниже 4.0 и приложение находится в приостановленном состоянии. Я нашел это решение в другом посте, но был сбит с толку, поскольку оно противоречило рекомендации в документации iOS Ref Lib (а именно, что мы должны возвращать YES в application:didFinishLaunchingWithOptions:
). (В тот момент я не осознавал, что документация противоречит сама себе).
Я считаю, что текущее поведение iOS 4.0 будет таким же и в будущем. Я предпочитаю следующее решение:
applicationDidFinishLaunching:
. application:didFinishLaunchingWithOptions:
и проверьте URL-адрес, верните YES, если вы можете его открыть, в противном случае NO, но не открывайте его. Если мы на 3.2, откройте URL. application:handleOpenURL:
и откройте URL-адрес, верните YES в случае успеха, иначе NO. Таким образом, я реализовал поведение iOS 4 и добавил следующую строку в application:didFinishLaunchingWithOptions:
if([[[UIDevice currentDevice] systemVersion] (hidden) {
[собственное приложение: дескриптор приложения OpenURL: URL];
}
, которые заставляют код работать под 3.2.