2015-12-26 5 views
3

У меня есть приложение, в котором вы можете найти сотрудников нашего университета, чтобы связаться с ними по электронной почте. Когда вы нашли кого-то и посмотреть на подробную информацию, 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

ответ

2

Я нашел ответ в форумах разработчиков Apple. updateUserActivityState: необходимо перезаписать.

- (void)updateUserActivityState:(NSUserActivity *)userActivity { 
    [userActivity addUserInfoEntriesFromDictionary:@{@"id" : _displayedPerson.personID, @"fullName" : [_displayedPerson completeName]}]; 
} 

Я понятия не имею, почему я должен был это сделать, но он работает. Надеюсь, это поможет и другим людям.

+0

Если вы не хотите использовать 'delegate', это другое свойство для использования:' requiredUserInfoKeys', строки должны быть включены в ключи, используемые в словаре пользовательской информации. – bubuxu

 Смежные вопросы

  • Нет связанных вопросов^_^