IOS9 withdrew from the Corespotlight framework, which provides some app-internal data for iOS search, enabling us to search for content in the app we use in the search box that appears on the iphone (and of course the app must be adapted for us to search). For corespotlight can be analogous to Nsuserdefault, is the global storage space. The difference is that the corespotlight is the system's storage space, each app can be accessed (there may be limited access, there is no time to study), but Nsuserdefault is private to each app. In addition, for the stored content corespotlight storage is item, that is, Cssearchableitem, and each cssearchableitem has many properties
Spotlight has made some new improvements on iOS9, which is to open up some new APIs, and with the core Spotlight framework you can integrate Spotlight into your app. The integrated Spotlight app can search the content of the app in spotlight and open the relevant page via content. Because of the development task, the boss said to let in the app support Spotlight, and then engaged in the official Apple documents. It can be said that the integration of spotlight is not complicated, the official online speaking also quite clear, today's blog through a demo to integrate spotlight.
Apple's official links to the core Spotlight framework are as follows:
Https://developer.apple.com/library/prerelease/ios/documentation/CoreSpotlight/Reference/CoreSpotlight_ framework/index.html#//apple_ref/doc/uid/tp40016250
One. Demo Run effect
or through a demo to introduce, demo running effect is as follows. We have content about Hayao Miyazaki in our app, and then search for Hayao Miyazaki in spotlight to search for relevant content, and you can click to open to show relevant content. The specific operating results are as follows:
Two. Integrated Core Spotlight Framework
1. To use Spotlight in the app, first introduce the core Spotlight framework,targets->general, linked frameworks and Libraries Click the plus sign to add corespotlight.framework. as shown below.
2. Introduce the header file into the corresponding view controller and then start writing code to enable your app content to support Spotlight search. Here is the code for adding spotlight to the demo. Spotlight search for things, each item is an entry that is Cssearchableitem object, and the object is associated with a collection of attributes (Cssearchableitemattributeset This collection stores the related properties of the Cssearchableitem object, if title, ContentDescription (content Introduction),
Thumbnaildata (picture) and other required content. For details, see the code description and code comments below.
Code Description:
(1). A temp array is defined first to store the keyword searched in Spotlight, which is the app content that spotlight can search for. The contents of the array are iterated through a series of steps to correlate the spotlight.
(2) Each time a content array is traversed, a cssearchableitemattributeset (property collection) is created and values are assigned to some properties in the property collection. You then create a cssearchableitem that associates the corresponding set of properties when you create the Cssearchableitem. Place each created entry into a mutable array, since all entries are created and associated with the Spotlight index (CSSEARCHABLEINDEX).
(3) Get the Cssearchableindex object through a singleton and associate it with the Cssearchableitem array we created. The specific code and steps are as follows.
1-(void) Supportspotlightsearch {2 dispatch_queue_t queue = Dispatch_get_global_queue (Dispatch_queue_priority_defau LT, 0); 3 Dispatch_async (Queue, ^{4 @try {5 Nsarray *temp = @[@ "Hayao Miyazaki-Dragon Cat" @ Miyazaki-Thousand and Chihiro, @ Miyazaki-Sky City]; 6 7//Create an array of Searchableitems 8 nsmutablearray *searchableitems = [[Nsmutablearray alloc] In ItWithCapacity:temp.count]; 9 for (int i = 0; i < temp.count; i + +) {11 12//1. Create an attribute collection of entries Cssearchableitemattributeset * AttributeSet = [[Cssearchableitemattributeset alloc] Initwithitemcontent Type: (nsstring*) kuttypeimage];14 15//2. Add a property to a property collection. Attributeset.title = temp[i];17 attributeset.contentdescription = [NSString stringwithformat:@ "Hayao Miyazaki and%@", temp[i]];18 Attributeset.thumbnaildata = Uiimagepngrepresentation ([UIImage imagenamed:[nsstring stringwithformat:@ "%d. png ", i+1]]); 19 20//3. Attribute collection is associated with an entry cssearchableitem *searchableitem = [ [Cssearchableitem alloc] initwithuniqueidentifier:[nsstring stringwithformat:@ "%d", i+1] domainidentifier:@ " Zeluli.spotlightsearchdemo "attributeset:attributeset];22 23//Hold the entry for staging 24 [Searchableitems addobject:searchableitem];25}26 27//4. The entry array is associated with the index 28 [[ Cssearchableindex Defaultsearchableindex] Indexsearchableitems:searchableitems completionHandler:^ (NSError * _ Nullable error) {if (!error) {NSLog (@ "%s,%@", __function__, [Error Localizeddes Cription]);}32}];33}34 @catch (nsexception *exception) {NS Log (@ "%s,%@", __function__, Exception),}37 @finally {38 39}40}); 41}
3. Handle the event that the entry is clicked on after the search, and the handling of the event is handled in the following delegate agent method in Appdelegate. The following idetifier is the unique identifier specified when the property collection is associated with an entry.
1-(BOOL) Application: (nonnull uiapplication *) application continueuseractivity: (nonnull nsuseractivity *) Useractivity Restorationhandler: (nonnull void (^) (Nsarray * __nullable)) restorationhandler{2 3 NSString * Idetifier = useractivity.userinfo[@ "Kcssearchableitemactivityidentifier"]; 4 5 uinavigationcontroller *navigationcontroller = (Uinavigationcontroller *) Self.window.rootViewController; 6 7 viewcontroller *VC = [Navigationcontroller viewcontrollers][0]; 8 [Vc.myimage setimage:[uiimage Imagenamed:[nsstring stringwithformat:@ "%@.png", Idetifier]]; 9 return yes;12}
Demo Share Address--github:https://github.com/lizelu/spotlightsearchdemo
Content of the core Spotlight framework search app in iOS development integration iOS9