'init(recordType:zoneID:)' is deprecated: Use init(recordType:recordID:) + CKRecord.ID(zoneID:) inst

Bonjour,

Jusqu'ici, je créais des RecordID comme ci-dessous:

let bottle = CKRecord(recordType: Cloud.Entity.Bouteille, zoneID: Cloud.sharedInstance.recordZone.zoneID)

J'ai maintenant un message d'erreur m'indiquant que la méthode est "deprecated" et que je dois d'abord créer un CKRecord.ID puis créer le CKRecord à partir de ce recordID.
Mon problème est maintenant que pour créer un CKRecord.ID, je dois fournir un "recordName" qui doit être unique alors que jusqu'à présent, le "recordName" était créé par CloudKit et que ça m'allait très bien.

Comment définir un recordName unique, sachant que des enregistrements existent déjà ! (sur 255 caractères, le risque de retomber sur le même recordName est faible, mais bon...)

Merci !
Nicolas

Réponses

  • DrakenDraken Membre
    octobre 2018 modifié #2

    Tu génères une clé aléatoire avec 255 caractères, et tu testes si elle existe déjà.

    EDIT : Tu peux aussi partir d'un événement unique, comme la date courante, pour y ajouter une clé alphanumérique aléatoire.

  • Pour générer ta clé aléatoire, il faut utiliser quelque chose dans ce genre :

        func cleAleatoire(longueur:Int) -> String {
            // Création de l'alphabet
            var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
            alphabet.append("abcdefghijklmnopqrstuvwxyz")
            alphabet.append("0123456789")
            var cle = ""
            for _ in 0..<longueur {
                if let car = alphabet.randomElement()
                {
                    cle.append(car)
                }
            }
            return cle
        }
    
  • UUID().uuidString me semble plus efficace pour cela.

  • Merci pour vos réponses. Je vais mettre tout ça en oeuvre.

    Mais pourquoi donc Apple déprécie-t-elle cette méthode, qui nécessite un effort pour la remplacer ???? Avec des risques d'erreur à la clef.

Connectez-vous ou Inscrivez-vous pour répondre.