【发布时间】:2018-12-01 05:39:38
【问题描述】:
我正在使用 NSUserActivity 和 CoreSpotlight API 以及 WWDC Introduction to Siri Shortcuts 和 Building for Voice with Siri Shortcuts 视频中的 NSUserActivity 示例代码部分,但是一旦我的用户删除了对应的数据。我的应用程序是一个读书应用程序,用户可以在其中下载和阅读书籍,因此我希望为用户下载的每本书提供快捷方式,但在/如果他们删除图书时删除快捷方式。
我在这里有定义NSUserActivity 及其相关属性的代码:
self.activity = [[[NSUserActivity alloc] initWithActivityType: @"Read a book"] autorelease];
self.activity.eligibleForSearch = true;
self.activity.eligibleForHandoff = true;
self.activity.eligibleForPublicIndexing = true;
self.activity.userInfo = @{ @"productID" : productID };
self.activity.requiredUserInfoKeys = [NSSet setWithArray: @[@"productID"]];
if (@available(iOS 12.0, *))
{
self.activity.eligibleForPrediction = true;
self.activity.suggestedInvocationPhrase = @"Read";
self.activity.persistentIdentifier = NSUserActivityPersistentIdentifier(productID);
}
我还有定义 CSSearchableItemAttributeSet 及其相关属性的代码,将其连接到 NSUserActivity 并使其处于活动状态:
CSSearchableItemAttributeSet *attributes = [[[CSSearchableItemAttributeSet alloc] initWithItemContentType: (NSString *)kUTTypeItem] autorelease];
attributes.title = bookTitle;
attributes.keywords = @[keywords];
attributes.contentDescription = author;
attributes.thumbnailData = [NSData dataWithContentsOfURL: self.bookCover];
attributes.domainIdentifier = productID;
self.activity.contentAttributeSet = attributes;
self.userActivity = self.activity;
[self.activity becomeCurrent];
我通过研究发现使用attributes.relatedUniqueIdentifier 可以摆脱userInfo 字典,在我的情况下,这使得快捷方式根本不显示,所以我改用attributes.domainIdentifier。
现在我在另一个文件中删除快捷方式。我试过使用这个使用self.activity.persistentIdentifier属性的代码:
if (@available(iOS 12.0, *)) {
[NSUserActivity deleteSavedUserActivitiesWithPersistentIdentifiers: @[NSUserActivityPersistentIdentifier(productID)] completionHandler: ^{}];
}
我也尝试过使用attributes.domainIdentifier 属性的这段代码:
[[CSSearchableIndex defaultSearchableIndex] deleteSearchableItemsWithDomainIdentifiers: @[productID] completionHandler: ^(NSError * _Nullable error) {}];
这些解决方案都没有奏效。在这两种情况下,我都检查了传递给函数的productID 参数,并且两次都得到了正确的值。
是我做错了什么还是我遗漏了什么?
提前感谢大家的帮助。这是我的第一篇文章,如果我需要提供更多信息,请告诉我。
【问题讨论】:
标签: ios objective-c corespotlight nsuseractivity sirishortcuts