ecnepsnai
ecnepsnai

Reputation: 2026

BAD_ACCESS when calling CSSearchableIndex indexSearchableItems

I am trying to implement the CoreSpotlight API in my app but can't seem to figure out why I am getting a BAD_ACCESS exception with my implementation:

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");
}];

Looking at the call stack for the exception, I can see that it occurs on the CSSearchableIndex indexSearchableItems: completionHandler: call. However I can step past that call without the exception triggering, maybe it has to do with the completion handler, however it happens regardless of if I have one or not. I have CoreSpotlight/CoreSpotlight.h and MobileCoreServices/MobileCoreServices.h imported both in my .h file and in the target.

Upvotes: 1

Views: 280

Answers (1)

ecnepsnai
ecnepsnai

Reputation: 2026

You're (I'm) creating the CSSearchableItemAttributeSet object incorrectly. Instead of:

CSSearchableItemAttributeSet * attributeSet = [CSSearchableItemAttributeSet new];

Use:

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

Upvotes: 3

Related Questions