swift - 如何显示 CloudKit 中最接近今天日期的帖子?

标签 swift sorting nsdate cloudkit ckrecord

我正在使用 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 记录类型属性显示最近发布的图像。我完全不知道如何做到这一点,因此非常感谢任何帮助!

最佳答案

此代码向您展示了基础知识。它没有得到最新的,它得到了最旧的,但你可以我确信弄清楚:)利用了一个优秀且非常有趣的 swift 来获取日期,你可以在这里阅读。

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

关于swift - 如何显示 CloudKit 中最接近今天日期的帖子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37176060/

相关文章:

arrays - UInt8 数组到 Swift 中的字符串

c:段错误(选择排序)

iphone - 如何将日期字符串解析为 iOS 中的 NSDate 对象?

iphone - "current time"转换为 "time in minutes since 00:00"计算帮助

Swift 4 Realm Swift 对象

swift - 处理自动布局和核心动画之间的冲突

swift - 在 Swift 中实现一个协议(protocol)

从实现 IComparable<T> 的东西继承时,C# BinarySearch 中断了吗?

r - 是否有 R 函数根据最接近的给定值对数据帧进行排序?

swift - 如何在 Swift 3 中将 "2017-01-09T11:00:00.000Z"转换为日期?