2017-08-13 2 views
1

J'essaie de charger, puis modifier et réenregistrer un tableau.CloudKit aucune erreur facultative

Code est ici, modifier func est du haut:

func modifyUserGroupsRequestee(){ 
    print("step2") 
    acceptedUsersArray.append(groupNameLbl.text!) 
    //error 
    userGroupRecordToUpdate.setObject(acceptedUsersArray as CKRecordValue?, forKey: "userGroups") 
    database.save(recordToUpdate) { (savedRecord, error) in 
     if error != nil{ 
      print(error.debugDescription) 
     }else{ 
      print("SAVED RECORD") 
     } 
    } 
} 

func resaveUserGroups(){ 
    print(addedUser) 
    print("step1") 
    // add group to requestees user groups 
    let pred = NSPredicate(format: "username = %@", "\(addedUser)") 
    let query = CKQuery(recordType: "PersonalUser", predicate: pred) 
    let operation = CKQueryOperation(query: query) 
    //operation.resultsLimit = CKQueryOperationMaximumResults 
    operation.recordFetchedBlock = { (record: CKRecord!) in 
     if record != nil{ 
      self.userGroupRecordToUpdate = record 
      // self.acceptedUsersArray = (record.object(forKey: "userGroups") as! Array) 
      print("usergroup names:: \(self.acceptedUsersArray)") 
      if let acceptedUserArrays = record.object(forKey: "userGroups") as? [String] { 
       // self.feedTableView.reloadData() 
       self.acceptedUsersArray = acceptedUserArrays 
       print("looks like we r going forward") 
       self.modifyUserGroupsRequestee() 
      // } 
      //self.feedTableView.reloadData() 
      print(groupNames.count) 
      print(self.acceptedUsersArray) 
     } 
    } 
    database.add(operation) 
    //self.tableView.reloadData() 
    // print(leaderboardInfo.count) 
    } 
} 

La fonction imprime step1 mais jamais arrive à l'étape 2. Dans la fonction bottom, j'ai une instruction if let que j'ai essayé de créer pour résoudre mon problème zéro (j'ai commenté mon code précédent au-dessus de cette ligne self.acceptedUsersArray ... De toute façon, je crois implémenter incorrectement l'instruction if let, car . les données sont chargées, même si il y a des données dans le kit nuage

Et j'ai mes dossiers cloudKit utilisateur personnel mis en place, voici une photo:

enter image description here

Répondre

0

Vous devriez essayer de garder votre code toujours en retrait (Dans l'éditeur Xcode, Cmd + A (Sélectionner tout), puis Ctrl + I (Renvoyer).)

Avec les commentaires confus enlevés, votre resaveUserGroups montre que:

func resaveUserGroups() { 
    print(addedUser) 
    print("step1") 
    // add group to requestees user groups 
    let pred = NSPredicate(format: "username = %@", "\(addedUser)") 

    let query = CKQuery(recordType: "PersonalUser", predicate: pred) 

    let operation = CKQueryOperation(query: query) 

    operation.recordFetchedBlock = { (record: CKRecord!) in 

     if record != nil { 
      self.userGroupRecordToUpdate = record 
      print("usergroup names:: \(self.acceptedUsersArray)") 

      if let acceptedUserArrays = record.object(forKey: "userGroups") as? [String] { 
       self.acceptedUsersArray = acceptedUserArrays 
       print("looks like we r going forward") 
       self.modifyUserGroupsRequestee() 

       print(groupNames.count) 
       print(self.acceptedUsersArray) 
      } 
     } 
     database.add(operation) 
    } 
} 

Omettre certaines parties afin de clarifier:

func resaveUserGroups() { 
    //... 

    operation.recordFetchedBlock = { (record: CKRecord!) in 

     if record != nil { 
      //... 
     } 
     database.add(operation) 
    } 
} 

La ligne database.add(operation) existe à l'intérieur du recordFetchedBlock.

Vous devrez peut-être corriger quelques autres parties (qui est une autre histoire), mais au moins, vous devez déplacer la ligne de la fermeture pour exécuter le operation que vous avez créé:

func resaveUserGroups() { 
    //... 

    operation.recordFetchedBlock = { (record: CKRecord!) in 

     if record != nil { 
      //... 
     } 
     //database.add(operation) 
    } //↓ 
    database.add(operation) 
} 
+0

J'ai déplacé la ligne d'une opération mais cela n'a pas changé le fait que le code à l'intérieur de l'instruction if let n'est pas appelé même si cela devrait être parce que ce n'est pas nul. –

+0

Qu'est-ce que vous obtenez si vous mettez 'print (record)' juste avant le if-let? – OOPer

+0

J'ai besoin de poster cet extrait de code séparément parce que c'est trop grand ... Facultatif ( { –

0

Je viens de résoudre il. Apparemment, il doit toujours y avoir une sorte de valeur à l'intérieur du tableau, même s'il vient d'être créé. J'essayais d'interroger un tableau qui existait dans le recordType, mais pas encore sous l'enregistrement spécifique.