Ios Can';t恢复NSUREActivity';s用户信息

Ios Can';t恢复NSUREActivity';s用户信息,ios,objective-c,corespotlight,nsuseractivity,Ios,Objective C,Corespotlight,Nsuseractivity,我有一个应用程序,你可以找到我们大学的员工,通过电子邮件与他们联系。当您找到某人并查看详细信息时,将创建一个nsserActivity: if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) { //Create NSUserActivity for the person NSUserActivity * activity = [[NSUserActivity alloc] initWithActivityTyp

我有一个应用程序,你可以找到我们大学的员工,通过电子邮件与他们联系。当您找到某人并查看详细信息时,将创建一个
nsserActivity

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

当我在spotlight中找到条目(正确显示所有相关数据)并单击它时,应用程序将打开,并调用
-(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;
}
我不明白,我犯了一个错误。我已经读过了,但没用


PS:
\u displayedPerson.personID
是一个
NSNumber
[\u displayedPerson completeName]
返回一个
NSString
我在苹果开发者论坛上找到了答案
updateUserActivityState:
需要覆盖

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

我不知道,为什么我要这样做,但它是有效的。希望,这也能帮助其他人。

如果您不想使用
委托
,这是另一个要使用的属性:
requiredUserInfoKeys
,字符串必须包含在userInfo字典中使用的键中。