2016-05-12 15 views
0

Ich entwickle eine Social-Media-App zum Spaß mit CloudKit und ich habe mich auf das Problem gedrängt, die zuletzt geposteten Bilder zuerst anzuzeigen.Wie kann ich den Beitrag anzeigen, der dem aktuellen Datum von CloudKit am nächsten ist?

Ich habe einen Record-Typ-Setup auf CloudKit, um das Bild und ein Datum gebucht zu haben, das programmatisch auf das Datum des iPhone-Postings eingestellt ist.

Hier ist mein Code für die Anzeige der Bilder, wenn Sie die App öffnen:

override func viewDidAppear(animated: Bool) { 
    let container = CKContainer.defaultContainer() 
    let publicDatabase = container.publicCloudDatabase 
    let predicate = NSPredicate(value: true) 
    let query = CKQuery(recordType: "Post", predicate: predicate) 

    publicDatabase.performQuery(query, inZoneWithID: nil) { results, error in 
     if error == nil { // There is no error 
      results 
      print("No Error") 
      if results!.count > 0 { 
       print("Found some") 
       self.newResults = results! 
       let randomNumber = arc4random_uniform(UInt32(results!.count - 1)) + 0 
       let randomNumberInt = Int(randomNumber) 
       let record = results![randomNumberInt] 
       let img = record.valueForKey("Picture") as? CKAsset 
       let image = UIImage(contentsOfFile: img!.fileURL.path!) 
       self.imageView.image = image 
       dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       }) 
      } 
     } 
     else { 
      print(error) 
     } 
    } 
} 

Vorerst dieser Code zeigt nur ein zufälliges Bild in dem results Array. Aber ich möchte die Ergebnisse irgendwie sortieren und das zuletzt gepostete Bild mit der DatePosted CloudKit-Datensatztyp-Eigenschaft anzeigen. Ich weiß nicht, wie ich das machen soll, also wäre jede Hilfe sehr willkommen!

+0

Nutzen Sie die 'sortDescriptors' Eigenschaft des' CKQuery'. – rmaddy

Antwort

1

Dieser Code zeigt Ihnen die Grundlagen. Es bekommt nicht das Neueste, es wird das Älteste, aber Sie können mir sicher sein, es herauszufinden :) Verwendet ein ausgezeichnetes und sehr interessantes Stück von Swift für die Daten, die Sie hier lesen können.

http://www.globalnerdy.com/2015/02/02/how-to-work-with-dates-and-times-in-swift-part-three-making-date-arithmetic-more-swift-like/

func cleanup4Cloud() { 
    let container = CKContainer(identifier: "iCloud.ch") 
    let publicDB = container.publicCloudDatabase 
    let predicate = NSPredicate(value: true) 
    let query = CKQuery(recordType: "Blah", predicate: predicate) 
    query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 

    cleanUpOperation = CKQueryOperation(query: query) 
    cleanUpOperation.desiredKeys = ["record.recordID.recordName"]; 

    cleanUpOperation.recordFetchedBlock = { (record) in 
     self.recordsRead.append(record.recordID) 
     let recordDOC = record["creationDate"] as! NSDate 

     let newTimeInterval = 4.hours.fromNow 

     let formatter = NSDateFormatter() 
     formatter.dateStyle = .NoStyle 
     formatter.timeStyle = .MediumStyle 

     let string = formatter.stringFromDate(newTimeInterval) 
     let string2 = formatter.stringFromDate(recordDOC) 

     if newTimeInterval.timeIntervalSinceReferenceDate > recordDOC.timeIntervalSinceReferenceDate { 
     print("recordDOC is older than \(string2) [\(string)]") 
     } 
    } 
    cleanUpOperation.queryCompletionBlock = {(cursor, error) in 
     if error != nil { 
      print("ting, busted",error!.localizedDescription) 
     } else { 
      print("self.recordsRead.count \(self.recordsRead.count)") 
      self.cleanOutDB() 
     } 

    } 
    cleanUpOperation.qualityOfService = .Background 

    publicDB.addOperation(cleanUpOperation) 
}