versiones restricciones olvide eliminar como codigo apple app objective-c xcode7 ios9 corespotlight

objective-c - restricciones - itunes



¿Hay un código de ejemplo para la función de búsqueda de corespotlight-API de iOS 9? (6)

  1. Cree un nuevo proyecto de iOS y agregue el marco CoreSpotlight y MobileCoreServices a su proyecto.

  2. Cree el objeto real de búsqueda de CSS y asocie el identificador único, el identificador de dominio y el conjunto de atributos. Finalmente, indexe el CSSearchableItem usando [[CSSearchableIndex defaultSearchableIndex] ...] como se muestra a continuación.

  3. OK! Prueba el índice!

¿Hay un código de ejemplo para la función de búsqueda de corespotlight - API de iOS 9? Realmente aprecio si se puede ver el código de ejemplo para implementar / probar.


  1. Escribe en tu clase de controlador principal

    -(void)storeValueForSpotligtSearch { NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; // **Your Model Array that Contain Data Like attributes Make, Model, Variant and Year and Images** for (MyCatalogeModel *myCatalogeModelObj in yourDataContainer) { NSMutableArray *arrKeywords = [[NSMutableArray alloc] initWithObjects: myCatalogeModelObj.year, myCatalogeModelObj.make, myCatalogeModelObj.model, myCatalogeModelObj.variant, nil]; NSString *strIdentifier = [NSString stringWithFormat:@"%@.%@",bundleIdentifier, myCatalogeModelObj.carId]; self.userActivity = [[NSUserActivity alloc]initWithActivityType:strIdentifier]; self.userActivity.title = myCatalogeModelObj.year; self.userActivity.title = myCatalogeModelObj.make; self.userActivity.title = myCatalogeModelObj.model; self.userActivity.title = myCatalogeModelObj.variant; self.userActivity.eligibleForSearch = YES; self.userActivity.eligibleForPublicIndexing = YES; self.userActivity.eligibleForHandoff = YES; CSSearchableItemAttributeSet * attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeJSON]; attributeSet.title = myCatalogeModelObj.make; attributeSet.thumbnailData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[myCatalogeModelObj.imageArray objectAtIndex:0]]]; attributeSet.contentDescription = [NSString stringWithFormat:@"%@ %@ %@ %@", myCatalogeModelObj.year, myCatalogeModelObj.make, myCatalogeModelObj.model, myCatalogeModelObj.variant]; attributeSet.keywords = arrKeywords; CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:strIdentifier domainIdentifier:@"spotlight.CARS24ChannelPartnerapp" attributeSet:attributeSet]; [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler: ^(NSError * __nullable error) { }]; self.userActivity.contentAttributeSet = attributeSet; [self.userActivity becomeCurrent]; [self updateUserActivityState:self.userActivity]; } }

  2. Escribe en la aplicación delegado

    -(BOOL)application:(nonnull UIApplication *) application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * __nullable))restorationHandler { @try { NSString *strIdentifier; NSNumber *numScreenId; NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init]; NSLog(@"Activity = %@",userActivity.userInfo); if (userActivity.userInfo[@"vc"]) { numScreenId = userActivity.userInfo[@"vc"]; } else{ strIdentifier = [userActivity.userInfo objectForKey:@"kCSSearchableItemActivityIdentifier"]; NSLog(@"strIdentifier : %@",strIdentifier); NSArray *arr = [strIdentifier componentsSeparatedByString:@"."]; NSString *strScreenId = [arr objectAtIndex:3]; NSLog(@"ID -= %@",strScreenId); **// On Click in Spotlight search item move your particular view.** [self moveToParticular:[strScreenId intValue]]; numScreenId = [numFormatter numberFromString:strScreenId]; } } @catch (NSException *exception) {} return YES; }


Estoy usando una implementación similar como lo menciona @mayqiyue, pero también estoy comprobando la existencia de la variable del item para verificar la compatibilidad hacia atrás con iOS 8.

- (void)setupCoreSpotlightSearch { CSSearchableItemAttributeSet *attibuteSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(__bridge NSString *)kUTTypeImage]; attibuteSet.title = NSLocalizedString(@"Be happy!", @"Be happy!"); attibuteSet.contentDescription = @"Just like that"; attibuteSet.keywords = @[@"example", @"", @"beer"]; UIImage *image = [UIImage imageNamed:@"Image"]; NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)]; attibuteSet.thumbnailData = imageData; CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"1" domainIdentifier:@"album-1" attributeSet:attibuteSet]; if (item) { [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * _Nullable error) { if (!error) { NSLog(@"Search item indexed"); } }]; } }

Para manejar el toque en el elemento de búsqueda de Spotlight, debe implementar el siguiente método en su AppDelegate:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler { if ([userActivity.activityType isEqualToString:CSSearchableItemActionType]) { NSString *uniqueIdentifier = userActivity.userInfo[CSSearchableItemActivityIdentifier]; // Handle ''uniqueIdentifier'' NSLog(@"uniqueIdentifier: %@", uniqueIdentifier); } return YES; }


Para completar la función de búsqueda de mayqiyue''s , una vez que haya implementado mayqiyue''s respuesta mayqiyue''s , podrá ver los resultados en la búsqueda, pero al seleccionar el resultado, su aplicación no abrirá la vista relacionada con el contenido relacionado.

Para hacerlo, vaya a su AppDelegate.m y agregue el siguiente método.

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler { //check if your activity has type search action(i.e. coming from spotlight search) if ([userActivity.activityType isEqualToString:CSSearchableItemActionType ] == YES) { //the identifier you''ll use to open specific views and the content in those views. NSString * identifierPath = [NSString stringWithFormat:@"%@",[userActivity.userInfo objectForKey:CSSearchableItemActivityIdentifier]]; if (identifierPath != nil) { // go to YOUR VIEWCONTROLLER // use notifications or whatever you want to do so UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; MyViewController *myViewController = [storyboard instantiateViewControllerWithIdentifier:@"MyViewController"]; // this notification must be registered in MyViewController [[NSNotificationCenter defaultCenter] postNotificationName:@"OpenMyViewController" object: myViewController userInfo:nil]; return YES; } } return NO; }

Asegúrese de importar en AppDelegate.m :

#import <MobileCoreServices/MobileCoreServices.h> #import <CoreSpotlight/CoreSpotlight.h>

ACTUALIZACIÓN para Swift 2.1

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { if #available(iOS 9.0, *) { if userActivity.activityType == CSSearchableItemActionType { //the identifier you''ll use to open specific views and the content in those views. let dict = userActivity.userInfo! as NSDictionary let identifierPath = dict.objectForKey(CSSearchableItemActivityIdentifier) as! String if identifierPath.characters.count > 0 { let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let mvc: MyViewController = storyboard.instantiateViewControllerWithIdentifier("MyViewController") as! MyViewController NSNotificationCenter.defaultCenter().postNotificationName("OpenMyViewController", object: mvc, userInfo: nil) } return true } } else { // Fallback on earlier versions return false } return false }

Asegúrese de importar en AppDelegate.swift :

import CoreSpotlight import MobileCoreServices


let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeImage as String) attributeSet.title = "Searchable Item" attributeSet.contentDescription = "Code for creating searchable item" attributeSet.keywords = ["Item","Searchable","Imagine"] attributeSet.thumbnailURL = NSURL(string: "https://blog.imagine.com/") let searchableItem = CSSearchableItem(uniqueIdentifier: "com.imagine.objectA", domainIdentifier: "spotlight.search", attributeSet: attributeSet) CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([searchableItem]) {_ in}


CSSearchableItemAttributeSet *attributeSet; attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage]; attributeSet.title = @"My First Spotlight Search"; attributeSet.contentDescription = @"This is my first spotlight Search"; attributeSet.keywords = @[@"Hello", @"Welcome",@"Spotlight"]; UIImage *image = [UIImage imageNamed:@"searchIcon.png"]; NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)]; attributeSet.thumbnailData = imageData; CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"com.deeplink" domainIdentifier:@"spotlight.sample" attributeSet:attributeSet]; [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler: ^(NSError * __nullable error) { if (!error) NSLog(@"Search item indexed"); }];

Nota: kUTTypeImage requiere que importe el marco de MobileCoreServices.