更新日期排序选项

Posted

技术标签:

【中文标题】更新日期排序选项【英文标题】:Update Date Sorting Alternative 【发布时间】:2016-09-29 12:34:24 【问题描述】:

我目前正在尝试更新几个月前购买的 Udemy 课程的代码,该课程在 Swift 2.2 版本中完全可用。但是,我遇到了这个特定功能的问题,它实际上只是对最近的聊天进行排序和显示(带有预览)。

代码如下:

 func loadRecents() 
        firebase.child("Recent").queryOrderedByChild("userId").queryEqualToValue(backendless.userService.currentUser.objectId).observeEventType(.Value, withBlock: 
            snapshot in

            self.recents.removeAll()

            if snapshot.exists() 

                let sorted = (snapshot.value!.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "date", ascending: false)])

                for recent in sorted 

                    self.recents.append(recent as! NSDictionary)
                    firebase.child("Recent").queryOrderedByChild("chatRoomID").queryEqualToValue(recent["chatRoomID"]).observeEventType(.Value, withBlock: 
                        snapshot in
                    )

                

            

            self.tableView.reloadData()
        )

    

我在这里得到错误:

let sorted = (snapshot.value!.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "date", ascending: false)])

我相信sortedArrayUsingDescriptors 已被弃用,但我仍然不确定。什么可以替代当前的代码?

提前致谢!

更新:

这是我得到的错误:

THread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, subcode=0x0)

【问题讨论】:

如果您可以添加您从编译器收到的确切错误,这将增加您获得正确答案的机会。 @torinpitchers 答案现已更新。我收到此错误:EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, subcode=0x0) 【参考方案1】:

问题的具体答案:什么是替代品(在 Swift 3 中):

let sorted = ((snapshot!.value! as AnyObject).allValues as NSArray)
         .sortedArray(using: [NSSortDescriptor(key: "date", ascending: false)])

此外,发布的代码基本上可以正常工作 - 尽管 for recent in sorted 部分中的代码对于 Swift 3 格式不正确。

该部分中的

recent["chatRoomID"] 可能是一个问题,因为 sorted 中的数据可能不是字符串 - 它们可能是字典。这取决于您的 Firebase 结构。

最后,减少对 NSSortDescriptors 等的依赖并以更 Swifty 的方式进行操作可能是个好主意。

查看我对您之前问题的回答

Swift 3 Firebase update code convertion - sorting

【讨论】:

嗯,我明白了。然而,代码现在似乎可以运行了——它显示了多个具有相同值的“最近”单元格。您对我上一篇文章的回答 - 似乎有点偏离,因为快照的结构是 [String:AnyObject]。关于如何使“最近”的代码不格式错误的任何想法? @askaale 实际上,根据答案中发布的结构,前面的答案是正确的(可能是 [String:AnyObject] 或 [String: [String:String]] 已发布。但是,我们仍然不知道您正在使用的 Firebase 结构,因此 AnyObject 实际上可以是任何对象 - 字符串、数组、字典甚至字典字典。发布您的结构总是有帮助的。您能否更新您的问题并包括您的 FireBase结构?

以上是关于更新日期排序选项的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery 中对选择选项进行排序以同时尊重每个选项数据属性?

为幻灯片添加自动更新日期和时间

gsutil / gcloud 存储文件列表排序日期降序?

引导日期选择器的覆盖选项

word中如何取消日期自动更正

PPT中如何自动更新日期?