2017-08-13 47 views
1

我想加載,然後修改並重新保存一個數組。CloudKit無可選錯誤

這裏是代碼,修改FUNC是頂級之一:

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) 
    } 
} 

功能打印第一步,但從來沒有獲取到第二步。在底層函數中,我有一個if let語句,我嘗試創建來解決我的無問題(我在前面的代碼中提到過我的代碼 - 無論如何,我相信我正在實現if let語句,因爲。沒有數據被加載,即使是在雲套件數據

而且我有我的個人用戶cloudKit記錄設置,這裏有一個圖:

enter image description here

回答

0

你應該儘量保持你的代碼總是縮進一致 (在Xcode編輯器中,Cmd + A(全選),然後按Ctrl + I(重新縮進)。)

隨着混亂的評論刪除,你resaveUserGroups顯示爲:

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) 
    } 
} 

省略某些部分澄清:

func resaveUserGroups() { 
    //... 

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

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

database.add(operation)存在recordFetchedBlock內。

您可能需要修正一些更多的部分(這是另一回事),但至少,你需要移動線走出封閉的執行operation已創建:

func resaveUserGroups() { 
    //... 

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

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

我移動了一條操作線,但它並沒有改變if let語句內部的代碼沒有被調用的事實,即使它應該導致它不爲零。 –

+0

如果你在if-let之前加上'print(record)',你會得到什麼? – OOPer

+0

我需要單獨發佈此代碼段導致其太大...可選( { –

0

我剛剛解決它。顯然,即使它剛剛創建,總是需要在數組內部有某種值。我試圖查詢recordType中存在的數組,但尚未在特定記錄下。