2016-05-12 8 views
0

私はCloudKitで楽しいソーシャルメディアアプリを開発していますが、最近投稿された画像を最初に表示するという問題に取り組んできました。CloudKitから今日の日付に最も近い投稿を表示するにはどうすればよいですか?

私はCloudKitに画像と日付を掲示するためのレコードタイプの設定を持っています。これはプログラムでiPhoneの投稿日に設定されています。ここで

は、アプリを開いたときに画像を表示するための私のコードです:今のところ

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

、このコードは、ちょうどresults配列にランダムな画像を表示します。しかし、私は何らかの理由で結果をソートし、DatePosted CloudKitレコードタイプのプロパティを使って、最近投稿された画像を表示したいと思います。私はこれを行う方法を完全に失っているので、どんな助けも非常に魅力的になるでしょう!

+0

'CKQuery'の' sortDescriptors'プロパティを使用してください。 – rmaddy

答えて

1

このコードは、基本を示しています。それは最新のものを取得しない、それは最も古い取得しますが、私はそれを把握することができます:)あなたがここで読むことができる日付のための迅速かつ非常に興味深い素敵な部分を使用します。

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) 
} 
関連する問題