Die Apple documentation on CoreSpotlight bricht den Prozess der Erstellung und das Hinzufügen von Elementen zu einem durchsuchbaren Index:
erstellen CSSearchableItemAttributeSet Objekt und geben Sie Eigenschaften, die das Element, das Sie wollen Index beschreiben.
Erstellen Sie ein CSSearchableItem-Objekt, das das Element darstellt. Ein CSCarearableItem-Objekt verfügt über eine eindeutige ID, über die Sie später auf verweisen können.
Geben Sie bei Bedarf einen Domänenbezeichner an, damit Sie mehrere Objekte zusammenfassen und als Gruppe verwalten können.
Verknüpfen Sie den Attributsatz mit dem durchsuchbaren Element.
Fügen Sie das durchsuchbare Element zum Index hinzu.
Hier ist ein kurzes Beispiel ich, dass zeigt, wie eine einfache Hinweis Klasse Index:
class Note {
var title: String
var description: String
var image: UIImage?
init(title: String, description: String) {
self.title = title
self.description = description
}
}
Dann in einer anderen Funktion, Notizen erstellen, eine CSSearchableItemAttributeSet
für jede Note erstellen, erstellen die Sammlung von durchsuchbaren Elementen einzigartige CSSearchableItem
aus dem Attribute gesetzt, und Index:
import CoreSpotlight
import MobileCoreServices
// ...
// Build your Notes data source to index
var notes = [Note]()
notes.append(Note(title: "Grocery List", description: "Buy milk, eggs"))
notes.append(Note(title: "Reminder", description: "Soccer practice at 3"))
let parkingReminder = Note(title: "Reminder", description: "Soccer practice at 3")
parkingReminder.image = UIImage(named: "parkingReminder")
notes.append(parkingReminder)
// The array of items that will be indexed by CoreSpotlight
var searchableItems = [CSSearchableItem]()
for note in notes {
// create an attribute set of type Text, since our reminders are text
let searchableItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
// If we have an image, add it to the attribute set
if let image = note.image {
searchableItemAttributeSet.thumbnailData = UIImagePNGRepresentation(image)
// you can also use thumbnailURL if your image is coming from a server or the bundle
// searchableItemAttributeSet.thumbnailURL = NSBundle.mainBundle().URLForResource("image", withExtension: "jpg")
}
// set the properties on the item to index
searchableItemAttributeSet.title = note.title
searchableItemAttributeSet.contentDescription = note.description
// Build your keywords
// In this case, I'm tokenizing the title of the note by a space and using the values returned as the keywords
searchableItemAttributeSet.keywords = note.title.componentsSeparatedByString(" ")
// create the searchable item
let searchableItem = CSSearchableItem(uniqueIdentifier: "com.mygreatapp.notes" + ".\(note.title)", domainIdentifier: "notes", attributeSet: searchableItemAttributeSet)
}
// Add our array of searchable items to the Spotlight index
CSSearchableIndex.defaultSearchableIndex().indexSearchableItems(searchableItems) { (error) in
if let error = error {
// handle failure
print(error)
}
}
Dieses Beispiel hat Biene n angepasst von AppCoda's How To Use Core Spotlight Framework in iOS 9 Führer.
so sind Ihre Daten Nachrichten? Für welche Attribute legen Sie derzeit Werte fest? der Betreff oder Textinhalt? – Wain
Warum können Sie nicht einfach die TXT-Datei in Ihrer App verlinken? Ich weiß, dass dies ein Hack für Ihren Fall sein wird, aber Ihr Problem auch lösen kann. Um Deeplink zu setzen, setze den eindeutigen Bezeichner und hole ihn in '- (BOOL) Anwendung: (UIApplication *) application continueUserActivity: (nichtnull NSUserActivity *) userActivity restorationHandler: (nichtnull void (^) (NSArray * _Nullable)) restorationHandler {}' in AppDelegate.m –
@Wain, Daten werden vom Benutzer gespeichert, also theoretisch kann es jeder Text sein, seine übliche Länge beträgt etwa 5000 Zeichen, obwohl es beliebig lang sein kann. Ich setze Titel und ThumbnailUrl, wenn das Item aus dem Web stammt, setze ich auch contentSources. –