У меня есть приложение, в котором вы можете найти сотрудников нашего университета, чтобы связаться с ними по электронной почте. Когда вы нашли кого-то и посмотреть на подробную информацию, NSUserActivity
создана:Не удается восстановить пользовательскую информацию NSUserActivity
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
//Create NSUserActivity for the person
NSUserActivity * activity = [[NSUserActivity alloc] initWithActivityType:CAUserActivityTypePerson];
activity.title = [_displayedPerson completeName];
activity.requiredUserInfoKeys = [NSSet setWithArray:@[@"id", @"fullName"]];
activity.userInfo = [NSDictionary dictionaryWithObjects:@[_displayedPerson.personID, [_displayedPerson completeName]] forKeys:@[@"id", @"fullName"]];
activity.keywords = [NSSet setWithObjects:[_displayedPerson completeName], [_displayedPerson institutionString], nil];
CSSearchableItemAttributeSet * contentAttributeSet = [[CSSearchableItemAttributeSet alloc] init];
contentAttributeSet.contentDescription = [_displayedPerson institutionString];
activity.contentAttributeSet = contentAttributeSet;
//make the activity active and searchable
self.userActivity = activity;
self.userActivity.eligibleForHandoff = NO;
self.userActivity.eligibleForSearch = YES;
self.userActivity.eligibleForPublicIndexing = NO;
self.userActivity.needsSave = YES;
[self.userActivity becomeCurrent];
NSLog(@"UserActivity created\nInfo: %@", self.userActivity.userInfo);
} else
NSLog(@"Did not create NSUserActivity! iOS 9 required!");
При создании UserActivity, NSLog(@"UserActivity created\nInfo: %@", self.userActivity.userInfo);
возвращает правильный userInfo
.
Когда я нахожу запись (отображающую все соответствующие данные правильно) в центре внимания и нажимаю ее, приложение будет открыто и вызывается - (BOOL)application:continueUserActivity:restorationHandler:
, а userActivity
содержит правильное название и тип. Но userInfo
и requiredUserInfoKeys
оба пустые.
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
NSLog(@"Activity: %@\nInfo: %@", userActivity.activityType, userActivity.requiredUserInfoKeys);
return YES;
}
Я не понимаю, где я совершил ошибку. Я уже читал this, но это не помогло.
PS: _displayedPerson.personID
является NSNumber
и [_displayedPerson completeName]
возвращает NSString
Если вы не хотите использовать 'delegate', это другое свойство для использования:' requiredUserInfoKeys', строки должны быть включены в ключи, используемые в словаре пользовательской информации. – bubuxu