Rafraichir l'interface avec CloudKit
Bonjour à tous,
Je me suis mit à CloudKit récemment. J'avais déjà essayé Parse avant donc je comprend le principe. Mais quelque chose me pose problème avec CloudKit que je n'arrive pas à résoudre. La question c'est "quand faut-il rafraichir l'interface lors d'une requête ?".
Je vous présente ce que j'ai fait :
var clipList = NSMutableArray()
func getClip() {
// On réinitialise le tableau contenant les clips
clipList = NSMutableArray()
// On défini la base de donnée publique
let container = CKContainer.defaultContainer()
let publicDataBase = container.publicCloudDatabase
// On créer une requête
let predicate = NSPredicate(value: true)
let sortDescriptor = NSSortDescriptor(key: "creationDate", ascending: false)
let query = CKQuery(recordType: "Clip", predicate: predicate)
query.sortDescriptors = [sortDescriptor]
// On exécute la requête
publicDataBase.performQuery(query, inZoneWithID: nil) { (recordList, error) -> Void in
if (error == nil) {
for record in recordList {
// on ajoute les clip à la liste
self.clipList.addObject(record)
println(self.clipList.count)
// On rafraichi l'interface
self.collectionView?.reloadData()
}
}
else {
println(error)
}
}
}
J'execute une simple requête qui va me chercher des données. Je passe donc par la méthode performQuery puis si il n'y a pas d'error, j'ajoute mes données à mon mutableArray.
Le soucis se situe au niveau du "self.collectionView?.reloadData()". J'ai println mes données quand elle sont reçues. Donc quand je lance mon app, j'ai presque instantanément la liste qui s'affiche dans ma console, mais je suis obligé d'attendre environ 5 secondes pour que "self.collectionView?.reloadData()" soit appelé...
Et je suis tombé par hasard sur ceci : une fois que mes données sont affichées dans la console, si je scroll ma collectionView, les données apparaissent. C'est évident puisque le reloadData() est appelé quand on scroll.
Avez-vous une idée d'où peut provenir le soucis ?
Merci d'avance
Réponses
sinon il y a une section Swift dédiée
C'est ce que je pensais au début, alors j'ai essayé de rajouter ceci dans mon performQuery :
Or il se trouve que j'ai une erreur disant "Could not find member 'reloadData'". J'ai pas mal cherché sur le web mais je n'ai rien trouvé qui puisse m'aider...
Oui c'est vrai et vu la nature de mon problème du coup (c'est peut-être un bug de swift), il serait peut-être mieux de le déplacer dans la section adéquate dans Swift. Merci pour la remarque.
Tout à fait, je ne comprends pas non plus pourquoi l'optional chaining ne convient pas. En même temps j'ai vu des problèmes similaires sur StackOverflow avec comme solution celle que je donne...
Bug du compilo ? (Je n'ai pas de Mac sous la main pour tester dans playground).
Effectivement ta solution fonctionne. Merci pour ta réponse zoc
C'est ce que j'étais en train de me dire j'ai vu ça sur MacG du coup j'ai téléchargé Xcode 6.3 et oui ça marche. Du coup j'ai plein d'erreurs avec Xcode 6.3 mais c'est une autre histoire ça.
Merci pour vos réponses.