首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 9-显示null的NSUserActivity userinfo属性

iOS 9-显示null的NSUserActivity userinfo属性
EN

Stack Overflow用户
提问于 2015-07-09 20:54:40
回答 7查看 5.2K关注 0票数 10

关于NSUserActivity的userInfo属性,我有一个简短的问题。

代码语言:javascript
复制
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片段:

代码语言:javascript
复制
-(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中还有其他人有这个问题吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-08-28 01:01:14

我正在使用iOS 9 beta 5,而userInfoapplication:continueUserActivity:restorationHandler:中可能为零的另一种方式是,如果您也设置了NSUserActivitywebPageURL属性。如果您设置了webPageURL属性,并且希望userInfo不为零,那么您将需要在NSUserActivityrequiredUserInfoKeys属性中包含适当的键。这需要我花很长时间才弄清楚,但我在文档中忽略了这一点,这让我感到羞愧。

代码语言:javascript
复制
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];
票数 11
EN

Stack Overflow用户

发布于 2015-07-15 11:04:13

嗨,你能登记一下你的continueUserActivity片段吗:

代码语言:javascript
复制
if ([userActivity.activityType isEqualToString:@"com.test.activity"])
{
      NSString *locationName = [[userActivity.userInfo objectForKey:@"location"] valueForKey: @"name"];
}

如果不是这样的话,我假设您的应用程序中集成了Core,而通过这些来自Core的元素,您就可以获得Spotlight了。

希望能帮上忙。

目前(Xcode 7 beta 3)许多开发人员无法通过NSUserActivity获得搜索API,包括我。

票数 3
EN

Stack Overflow用户

发布于 2015-08-11 14:36:27

导致这一错误的是beta 3的问题。从beta 5开始,一切都很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31328032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档