我的应用程序使用放入 PFTableViewController 中的解析对象。该应用程序的用户可以添加新内容,对于使用该应用程序的其他每个人来说,这将显示为一个新单元格。我想在此实现 iOS 9 的核心 Spotlight 功能,以便当用户打开应用程序时,它会索引 PFObjects 中的数据。例如,应用程序(祈祷应用程序)中的用户说,他们需要为自己是一个酒鬼祈祷……其他人可以在手机上进入 Spotlight 搜索,输入酒鬼,然后就会显示该特定请求。我在《App Search 编程指南》中看到的类似内容的示例是用 Swift 编写的,而我对 Obj-C 更熟悉,并且不想仅仅为了这个应用程序而将这个应用程序的整个类重写为 Swift特征。它也是一次性使用的项目,有人可以帮助指导我转换为 Obj-C 以及如何让它一次索引所有 20 个可见的项目,并在它们向下翻页时继续索引吗?
// Create an attribute set to describe an item.
let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeData as String)
// Add metadata that supplies details about the item.
attributeSet.title = "July Report.Numbers"
attributeSet.contentDescription = "iWork Numbers Document"
attributeSet.thumbnailData = DocumentImage.jpg
// Create an item with a unique identifier, a domain identifier, and the attribute set you created earlier.
let item = CSSearchableItem(uniqueIdentifier: "1", domainIdentifier: "file-1", attributeSet: attributeSet)
// Add the item to the on-device index.
CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([item]) { error in
if error != nil {
print(error?.localizedDescription)
}
else {
print("Item indexed.")
}
}
最佳答案
首先,无需在 Swift 中执行,这里有 Obj-C 代码和文档。
示例:
CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString*)kUTTypeJSON];
attributeSet.title = title;
attributeSet.contentDescription = description;
attributeSet.keywords = @[keywords];
attributeSet.thumbnailData = thumbnailData;
CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:identifier domainIdentifier:domainIdentifier attributeSet:attributeSet];
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler: ^(NSError * __nullable error) {
NSLog(@"Indexed");
}];
我认为你想要解决这个问题的方法是创建一个函数,在你完成加载/呈现 Parse 信息后调用(即基本上在你的 PFTableViewController 的 TableView 更新的任何时候)
您将不得不执行一个 for 循环,并使其非常动态地接收每个单元格/行的信息。
就核心 Spotlight 搜索中显示的内容而言,您必须为每个项目设置关键字。请注意,关键字区分大小写,我花了一段时间才注意到。这些关键字将与该单元格/行匹配。
就打开应用程序而言,有一种方法可以在您使用 NSUserActivity 的 AppDelegate 中使用,通过它的用户信息或您想要的任何方式,并获取从那里获取信息以打开某个页面。
-(BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * _Nullable))restorationHandler
希望对您有所帮助!让我知道我是否可以做任何其他事情来使它更清楚一点,因为我知道我不是最擅长使事情简洁的人。编码愉快!
在这里回复@user717452 评论以获得更好的样式
您只提到了 swift,所以我展示了 Spotlight 搜索的 objective-c 代码是什么样的。
您可以循环遍历您的 PFObject,假设它是一个 PFObject 数组,只需执行一个常规的 for 循环和一个内部带有字典的可变数组。假设您的 PFObject 是这样的:parse.com/docs/ios/api/Classes/PFObject.html
NSMutableArray *mutArray = [[NSMutableArray alloc] init];
for(int i=0; i<pfobjectArray.count;i++ {
[mutArray addObject:@{@"title":[pfobjectArray[i] title], @"keywords":[pfobjectArray[i] keywords], @"thumbnail_data":[pfobjectArray[i] thumbnail], @"identifier":[pfobjectArray[i] identifier]}];
}
然后使用“mutArray”进行 spotlightSearch。
for(int i=0; i<mutArray.count;i++) {
CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString*)kUTTypeJSON];
attributeSet.title = mutArray[i][@"title"];
attributeSet.contentDescription = mutArray[i][@"description"];
attributeSet.keywords = [NSArray arrayWithArray:mutArray[i][@"keywords"]];
attributeSet.thumbnailData = mutArray[i][thumbnail_data];
CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:mutArray[i][@"identifier"] domainIdentifier:@"com.iphone.app" attributeSet:attributeSet];
[arrayOfItems addObject:item];
}
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:[arrayOfItems mutableCopy] completionHandler: ^(NSError * __nullable error { NSLog(@"Spotlight Popular"); }];
关于ios - 解析对象中的核心亮点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32747532/