关于NSUserActivity的userInfo属性,我有一个简短的问题。
NSString *activity = @"com.test.activity";
NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:activity];
userActivity.title = @"Test";
userActivity.keywords = [NSSet setWithArray:@[@"Test"];
userActivity.userInfo = @{@"location": location};
userActivity.eligibleForSearch = YES;
self.userActivity = userActivity;
[self.userActivity becomeCurrent]; 我在一个视图控制器viewDidLoad()中实现了上述代码片段。当我的项目出现在聚束搜索中时,它会调用continueUserActivity委托方法。
我正在尝试访问userActivity.userInfo属性,但它正在返回null,即使它是在上面设置的。
下面是continueUserActivity片段:
-(BOOL)application:(nonnull UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * __nullable))restorationHandler {
NSString *locationName = [[userActivity.userInfo objectForKey:@"location"] valueForKey: @"name"];
// Do stuff with locationName
return NO;}
编辑:我将location对象更改为返回为基本类型,但在委托方法上仍然获得null。
在iOS 9 beta 3中还有其他人有这个问题吗?
发布于 2015-08-28 01:01:14
我正在使用iOS 9 beta 5,而userInfo在application:continueUserActivity:restorationHandler:中可能为零的另一种方式是,如果您也设置了NSUserActivity的webPageURL属性。如果您设置了webPageURL属性,并且希望userInfo不为零,那么您将需要在NSUserActivity的requiredUserInfoKeys属性中包含适当的键。这需要我花很长时间才弄清楚,但我在文档中忽略了这一点,这让我感到羞愧。
NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:activityType];
activity.title = @"title";
activity.webpageURL = [NSURL URLWithString:webLinkUrlString];
activity.userInfo = @{@"id": webLinkUrlString, @"deep_link": deepLinkUrl};
// set requiredUserInfoKeys if you're also setting webPageURL !!
// otherwise, userInfo will be nil !!
activity.requiredUserInfoKeys = [NSSet setWithArrays:@[@"id", @"deep_link"]];
activity.eligibleForSearch = YES;
activity.eligibleForPublicIndexing = YES;
activity.contentAttributeSet = attributeSet;
activity.keywords = [NSSet setWithArray:keywordsArray];
self.activity = activity;
[self.activity becomeCurrent];发布于 2015-07-15 11:04:13
嗨,你能登记一下你的continueUserActivity片段吗:
if ([userActivity.activityType isEqualToString:@"com.test.activity"])
{
NSString *locationName = [[userActivity.userInfo objectForKey:@"location"] valueForKey: @"name"];
}如果不是这样的话,我假设您的应用程序中集成了Core,而通过这些来自Core的元素,您就可以获得Spotlight了。
希望能帮上忙。
目前(Xcode 7 beta 3)许多开发人员无法通过NSUserActivity获得搜索API,包括我。
发布于 2015-08-11 14:36:27
导致这一错误的是beta 3的问题。从beta 5开始,一切都很好。
https://stackoverflow.com/questions/31328032
复制相似问题