我正在尝试在我的应用中实现CoreSpotlight API,但似乎无法弄清楚为什么我的实现会出现BAD_ACCESS异常:
CSSearchableItemAttributeSet * attributeSet = [CSSearchableItemAttributeSet new];
attributeSet.title = route.Options.name;
attributeSet.keywords = [route.Options.name componentsSeparatedByString:@" "];
UIImage *image = [UIImage imageNamed:@"pin_busstop.png"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
attributeSet.thumbnailData = imageData;
CSSearchableItem * item = [[CSSearchableItem alloc] initWithUniqueIdentifier:route.ObjectID domainIdentifier:@"com.whatever.itsmyappsname.loadwithroute" attributeSet:attributeSet];
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:[NSArray arrayWithObject:item] completionHandler:^(NSError * _Nullable error) {
NSLog(@"It worked");
}];
查看异常的调用堆栈,我可以看到它发生在CSSearchableIndex indexSearchableItems: completionHandler:
调用上。但是我可以在没有异常触发的情况下跳过该调用,也许它与完成处理程序有关,但无论是否有一个,它都会发生。我在.h文件和目标中都导入了CoreSpotlight/CoreSpotlight.h
和MobileCoreServices/MobileCoreServices.h
。
答案 0 :(得分:3)
你(我)正确地创建了CSSearchableItemAttributeSet对象。而不是:
CSSearchableItemAttributeSet * attributeSet = [CSSearchableItemAttributeSet new];
使用:
CSSearchableItemAttributeSet * attributeSet = [[CSSearchableItemAttributeSet alloc]
initWithItemContentType:(NSString *)kUTTypeImage];