3

大学の職員を見つけてメールで連絡できるアプリがあります。誰かを見つけて詳細情報を見ると、 aNSUserActivityが作成されます。

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れ、正しいタイトルとタイプが含まれます。しかしuserInforequiredUserInfoKeys両方とも空です。

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {

    NSLog(@"Activity: %@\nInfo: %@", userActivity.activityType, userActivity.requiredUserInfoKeys);

    return YES;
}

どこを間違えたのかわかりません。私はすでにこれを読みましたが、役に立ちませんでした。

PS:_displayedPerson.personIDは aであり、 aNSNumber[_displayedPerson completeName]返しますNSString

4

1 に答える 1

2

Apple Developer Forums で回答を見つけました。updateUserActivityState:上書きする必要があります。

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

なぜこれをしなければならなかったのかわかりませんが、うまくいきます。これが他の人にも役立つことを願っています。

于 2015-12-28T00:48:56.663 に答える