调用CSSearchableIndex indexSearchableItems时的BAD_ACCESS

时间:2015-10-10 23:32:39

标签: ios objective-c

我正在尝试在我的应用中实现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.hMobileCoreServices/MobileCoreServices.h

1 个答案:

答案 0 :(得分:3)

你(我)正确地创建了CSSearchableItemAttributeSet对象。而不是:

CSSearchableItemAttributeSet * attributeSet = [CSSearchableItemAttributeSet new];

使用:

CSSearchableItemAttributeSet * attributeSet = [[CSSearchableItemAttributeSet alloc]
                                                initWithItemContentType:(NSString *)kUTTypeImage];