Ответ 1
Я использовал UIAlertView
, чтобы получить описание launchOptions при выходе из NSUserActivity:
NSDictionary *userActivityDictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"alert"
message:[userActivityDictionary description]
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil];
[alertView show];
По-видимому, этот словарь содержит пару ключей, которые, как мне кажется, не могут найти документацию для:
UIApplicationLaunchOptionsUserActivityIdentifierKey
UIApplicationLaunchOptionsUserActivityKey
UIApplicationLaunchOptionsUserActivityTypeKey // there is documentation for this key
Кажется, что объект NSUserActivity находится внутри этого словаря, но он может быть не очень хорош с точки зрения Apple (или он может сломаться, если Apple решит изменить ситуацию), чтобы попытаться получить доступ к этому объекту (например, возможно, перейдя через словарные ключи и поиск объекта NSUserActivity).
**** Решение ****
EDIT: Здесь представлена некоторая реализация того, как получить доступ к объекту NSUserActivity из launchOptions:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSDictionary *userActivityDictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey];
if (userActivityDictionary) {
[userActivityDictionary enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[NSUserActivity class]]) {
NSLog(@"found NSUserActivity object!");
}
}];
}
}
Используя этот метод, вам не нужно знать значение недокументированного ключа, UIApplicationLaunchOptionsUserActivityKey.
Если вам неудобно решение выше, другим методом может быть захват объекта NSUserActivity, когда ваше приложение входит в этот метод,
- (BOOL)application:continueUserActivity:restorationHandler:
Затем установите эту активность пользователя как свойство вашего AppDelegate для последующего поиска.
Примечание. Я смог проверить, что вышеописанный метод вызывается при запуске холодного приложения при тестировании Core Spotlight (функция iOS 9).