iOS 9 - NSUserActivity userinfo属性显示为null

Jas*_*Ngo 9 objective-c ios ios9

我有一个关于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];  
Run Code Online (Sandbox Code Playgroud)

我在视图控制器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;
Run Code Online (Sandbox Code Playgroud)

}

编辑:我更改了位置对象作为基本类型返回,但我仍然在委托方法上获取null.

是否有其他人在iOS 9 beta 3中遇到此问题?

mar*_*kim 11

我在的iOS 9测试版5个,并另一种方式userInfo可能是nil内的application:continueUserActivity:restorationHandler:是,如果你也设置NSUserActivitywebPageURL属性.如果设置webPageURL属性,并希望userInfo不要是零,那么你将需要在适当的键NSUserActivityrequiredUserInfoKeys属性.我花了很长时间才弄明白,但在文档中遗漏了这一点让我感到羞耻.

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];
Run Code Online (Sandbox Code Playgroud)

  • 我几乎就是这样做的,它在 Xcode 7 beta 6 中似乎对我不起作用,无论是在模拟器上还是在设备上。userInfo 字典始终为空。这对你有用吗? (2认同)