2016-12-20 7 views
1

私のアプリでCloudKitに問題があります。最初にビューをロードすると、データは完全にロードされます。しかし、私が "Pull to Refresh"すると、 "致命的なエラー:インデックスが範囲外です"というメッセージが表示されます。奇妙なことは、少なくとも私にとってはコードに違いがないということです。 私がリフレッシュするとき、 "実行する"( "B"が印刷されない)実行さえしません。 デバッガにエラーが表示されません。CloudKit perform

手掛かりがありますか?

ありがとうございます!

ニコ

のviewDidLoad

loadCloudData() 

handlePullToRefresh

func handlePullToRefresh() { 
    loadCloudData() 
} 

loadCloudData

func loadCloudData() { 
     DispatchQueue.main.async { 
      self.showMessage(titleText: NSLocalizedString("Loading ...", comment: "SwiftMessage Loading Title"), text: NSLocalizedString("Loading PixelCodes from Cloud", comment: "SwiftMessage Loading Title"), backgroundColor: UIColor.tileYellow(), textColor: UIColor.darkGray, image: #imageLiteral(resourceName: "cloud")) 
     } 

     dataCloud = [CKRecord]() 
     let query = CKQuery(recordType: PixelCodeType.recordType, predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)) 
     query.sortDescriptors = [NSSortDescriptor(key: "title", ascending: true)] 

     print("A") 

     databasePublic.perform(query, inZoneWith: nil) { (results:[CKRecord]?, error:Error?) in 
      print("B") 
      if error != nil { 
       print("PixelCode from Cloud not Loaded!\n\(error!.localizedDescription)") 
       self.couldLoadCloadData = false 
       DispatchQueue.main.async { 
        SwiftMessages.hideAll() 

        if self.refreshControl != nil { 
         if self.refreshControl!.isRefreshing { 
          self.refreshControl!.endRefreshing() 
         } 
        } 

        //"Cloud" active 
        self.segmentedControl.setEnabled(true, forSegmentAt: 1) 
       } 
       self.handleError(title: NSLocalizedString("Error!", comment: "SwiftMessage error title"), text: error!.localizedDescription, errorTitle: "Cloud Loading Error:loadCloudData()", error: error) 
      } else { 
       if let data = results { 
        print("pixelCodes updated") 
        self.dataCloud = data 

        if results!.isEmpty { 
         self.couldLoadCloadData = true 
         self.isCloudDataLoaded = false 
        } else { 
         self.couldLoadCloadData = true 
         self.isCloudDataLoaded = true 
        } 

        self.uploadTimes() 

        DispatchQueue.main.async { 
         if self.refreshControl != nil { 
          if self.refreshControl!.isRefreshing { 
           self.refreshControl!.endRefreshing() 
          } 
         } 
         SwiftMessages.hideAll() 

         //"Cloud" active 
         self.segmentedControl.setEnabled(true, forSegmentAt: 1) 

         self.tableView.reloadData() 
        } 
       } 
      } 
     } 
    } 

答えて

1

あなたloadCloudData関数は空の配列にdataCloud配列を設定されているんが、あなたは、配列内の項目数と項目数ので、テーブルビューにreloadDataを呼び出さないことをまず最初にそのテーブルビューここではは配列内にあると思います。

アレイをクリアした後、またはアレイをクリアしないで、reloadDataに電話するか、

+0

「dataCloud = [CKRecord]()」を削除しても問題ありません。なぜ私はそれを取り除くことを考えなかったのか分かりません。どうもありがとう!!! –

関連する問題