J'essaie de créer une application de test qui utilise CoreSpotlight pour rendre le contenu consultable dans iOS Spotlight. Actuellement, je l'ai configuré à chaque fois que l'utilisateur appuie sur un bouton de rafraîchissement, il fait une demande de serveur puis deleteAllSearchableItems
puis indexSearchableItems
(probablement pas le meilleur moyen mais plus facile pour le moment, puisque je suis encore au début des phases de comprendre cela).iOS CoreSpotlight Thumbnail Image de l'URL
Ci-dessous est mon code qui fait cela.
var searchableItems: [CSSearchableItem] = []
for i in 0 ..< self._ids.count {
let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)
attributeSet.title = self._titles[i]
attributeSet.contentDescription = self._descriptions[i]
let searchableItem = CSSearchableItem(uniqueIdentifier: self._ids[i], domainIdentifier: "com.domain.appname", attributeSet: attributeSet)
searchableItems.append(searchableItem)
}
CSSearchableIndex.default().deleteAllSearchableItems(completionHandler: { (error) -> Void in
CSSearchableIndex.default().indexSearchableItems(searchableItems) { (error) -> Void in
if error != nil {
print(error?.localizedDescription ?? "Error")
}
}
})
Ma prochaine chose que je suis en train de faire est que j'ai un tableau d'images appelées self._images
. À l'intérieur de ce tableau est une chaîne vide (""
) ou une chaîne d'une URL ("https://mywebsite.com/image.png"
).
Actuellement, je peux utiliser le code ci-dessous pour définir l'image d'un UIImageView à l'image à cette URL, en utilisant AlamofireImage.
if (self._images[0] != "") {
myImageView.af_setImage(withURL: URL(string: self._images[0])!)
}
Comment puis-je obtenir cette même image dans l'ensemble d'attributs CoreSpotlight?
Je suppose que attributeSet.thumbnailData.af_setImage(withURL: imagedownloadURL)
ne fonctionnera pas. Surtout que c'est asynchrone.
Quelle serait la manière la plus simple de l'intégrer? J'ai essayé quelques choses comme pour les boucles et autres, mais le plus gros problème est l'asynchrone et je n'arrive pas à trouver une solution pour le faire car il est asynchrone et j'ai plusieurs éléments.
Merci beaucoup d'avance!
Pouvez-vous s'il vous plaît ajouter un peu plus en détail à votre réponse? Comment fonctionne exactement votre exemple de code? Et pourquoi n'est-ce pas la meilleure solution? Juste globalement plus de détails seraient utiles. –
Ajouté quelques détails .. – Bilal
Ce détail était utile. J'essaie toujours d'envelopper ma tête autour d'async vs sync en termes de Swift. Je vais voter votre réponse maintenant. Je n'attribue pas la prime et je n'accepte pas de réponse jusqu'à ce que la prime soit finie au cas où quelqu'un aurait une meilleure réponse ou quelque chose comme ça. Mais je vais accorder la prime à une question et accepter une réponse après la fin. Merci beaucoup. –