2017-08-13 10 views
1

私はロードしてから、アレイを変更して再保存しようとしています。ここでCloudKit nilオプションのエラー

は、FUNCを変更し、コードでトップ1です:

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ステートメントを持っています(私は前のコードをその行self.acceptedUsersArrayの上にコメントしました...とにかく、if letステートメントを間違って実装していると思います。 。何もデータが

クラウドキット内のデータがあっても、ロードされていないと私は私の個人的なユーザーcloudKitレコードがセットアップされているか、ここにPICです:

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

明確にするために、いくつかの部品を省略:database.add(operation)recordFetchedBlock内側に存在する

func resaveUserGroups() { 
    //... 

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

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

ライン。私はちょうど解決

func resaveUserGroups() { 
    //... 

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

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

私は1つのオペレーションラインを移動しましたが、if letステートメント内のコードが呼び出されないという事実が変更されていません。 –

+0

if-letの直前に 'print(record)'を置くとどうなりますか? – OOPer

+0

このコードスニペットを別途投稿する必要があります...オプション( { –

0

あなたは、いくつかのより多くの部分を(それはまた別の話だ)を固定する必要があるかもしれませんが、少なくとも、あなたはoperation作成したを実行するためにクロージャの外に線を移動する必要がありますそれ。明らかに、作成されたばかりの配列であっても、常に配列内に何らかの価値がある必要があります。私はrecordTypeに存在する配列を照会しようとしましたが、まだ特定のレコードの下にはありません。

関連する問題