2016-05-12 3 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

использование сделать из 'sortDescriptors' свойство' CKQuery'. – 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) 
} 
Смежные вопросы