gpt4 book ai didi

ios - 如何查询 String AND NSDate 属性?

转载 作者:行者123 更新时间:2023-11-30 13:14:09 25 4
gpt4 key购买 nike

我的代码遇到一个奇怪的错误:

if let date = self.messages.last?.date {
let newMessages = self.realm.objects(Message).filter("chatId == '\(self.chatId!)' AND date > \(date)")
}

这会输出错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "chatId = 'oSgUGWH9fWURmBh5NQZK2POpxdI3yEdl7PrPzAU33l7cVFIpzR38otF3' AND date > 2016-07-17 10:56:07 +0000"'

我做错了什么?

编辑:

使用NSPredicate它可以工作:

let predicate = NSPredicate(format: "chatId = %@ AND date > %@", self.chatId!, date)
newMessages = self.realm.objects(Message).filter(predicate)

但是为什么第一个解决方案不起作用?

最佳答案

如果要使用谓词过滤数组,则需要传递谓词而不仅仅是字符串文字作为参数,并且还要使用方法 filteredArrayUsingPredicate(_:) .

为什么"chatId == '\(self.chatId!)' AND date > \(date)"不起作用的是编译器将其解释为字符串文字 - 而不是您在其他示例中创建的谓词:

NSPredicate(format: "chatId = %@ AND date > %@", self.chatId!, date)

修复方法是实例化 NSPredicate正如您在编辑中所做的那样,并将该值传递给 filteredArrayUsingPredicate(:_)或者只是将实例化移动到方法内部:

newMessages = self.realm.objects(Message).filteredArrayUsingPredicate(NSPredicate(format: "chatId = %@ AND date > %@", self.chatId!, date))

如果要使用此方法,数组需要是 NSArray ,并且数组中的对象需要符合 KVC 标准,因此在 Swift 中最好使用 filter(_:)方法如下:

let newMessages = self.realm.objects(Message).filter({ $0.chatId == self.chatId! && $0.date.compare(date) == NSComparisonResult.OrderedDescending })

关于ios - 如何查询 String AND NSDate 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38420518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com