2016-06-20 22 views
0

Ich habe viele Foren und Tutorials in der Hoffnung, meine cloudkit app zu beschleunigen gesucht - (zumindest) scheint es, dass die Antwort auf die Festlegung der Quality of Service-Funktion zu "UserInteractive". Im Moment dauert es etwa 2/3 Sekunden, um einen Tabellen-Controller mit 3 Datensätzen zu aktualisieren, von denen jeder nur eine String-Variable hat, die durch ein Label angezeigt wird. Nach meinem Wissen wird das UI durch die Einstellung der Benutzerschnittstelle für die Benutzerschnittstelle schneller aktualisiert. Ich bin mir jedoch nicht sicher, wie ich den Qos-Code vollständig implementieren kann. Wie es aussieht, hier ist mein Code, der 2/3 Sekunden dauert, um zu laden.Wie füge ich NS Operation hinzu QOS = .UserInteractive, um Funktion abzufragen

func fetch() 
    { 
    let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase 
    let predicate = NSPredicate(value: true) 
    let query = CKQuery(recordType: "Dining", predicate: predicate) 

    publicDatabase.performQuery(query, inZoneWithID: nil) { (results, error) -> Void in 
     if (error != nil) 
     { 
      print("Error" + (error?.localizedDescription)!) 
     } 
     else 
     { 
      for result in results! 
      {  
       self.categories.append(result) 
      } 

      dispatch_async(dispatch_get_main_queue(), {() -> Void in   
       self.tableView.reloadData() 
      }) 
     } 
     } 
} 
    fetch() 
} 

Daher, um eine schnellere UI-Antwort zu erreichen, würde ich in der Lage sein, etwas wie das zu implementieren?

func fetch() 
    { 
    let publicDatabase =  CKContainer.defaultContainer().publicCloudDatabase 
    let predicate = NSPredicate(value: true) 
    let query = CKQuery(recordType: "Dining", predicate: predicate) 

    publicDatabase.performQuery(query, inZoneWithID: nil) { (results, error) -> Void in 
     if (error != nil) 
     { 
      print("Error" + (error?.localizedDescription)!) 
     } 
     else 
     { 
      for result in results! 
      {  
       self.categories.append(result) 
      } 

      let qualityOfServiceClass = QOS_CLASS_UserInteractive 
    let Queue = dispatch_get_global_queue(qualityOfServiceClass, 0) 
    dispatch_async(Queue, { 
    print("This is run on the background queue") 

    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    self.tableView.reloadData() 
}) 
}) 

     } 
     } 
} 
    fetch() 
} 

Antwort

0

eine Abfrageoperation entlang dieser Linien verwenden:

func fetch(){ 
    let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase 
    let predicate = NSPredicate(value: true) 
    let query = CKQuery(recordType: "Dining", predicate: predicate) 
    let queryOperation = CKQueryOperation(query: query) 
    queryOperation.qualityOfService = .userInteractive 
    queryOperation.recordFetchedBlock = {(record: CKRecord) -> Void in 
     // Do things with record 
    queryOperation.queryCompletionBlock = {(cursor, error) in 
     // Handle error and do things 

     } 
    } 
publicDB.add(queryOperation) 
} 

siehe Dokumentation auf NSOperation und seine Instanz Eigenschaft QualityOfService