CloudKit nil可选错误

时间:2017-08-13 20:03:00

标签: arrays swift if-statement optional 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)
   }
}

该函数打印step1但从未进入step2。在底部函数中,我有一个if let语句,我试图创建以解决我的nil问题(我在上面的代码中评论了我自己的行 - self.acceptedUsersArray ...无论如何,我相信我正在实现if let语句错误,因为即使云工具包中有数据,也不会加载任何数据。

我确实设置了我的个人用户cloudKit记录,这是一张图片:

enter image description here

2 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分:0)

我刚解决了。显然,即使它刚刚创建,也总是需要在数组中有某种值。我试图查询recordType中存在的数组,但尚未在特定记录下查找。