【发布时间】:2020-03-07 12:22:50
【问题描述】:
我有一个日期属性类型为 Date 的领域对象,并且想要获取具有特定日期的项目列表。
如果我点击日历中的特定日期,例如 2020-03-06 ,那么它将显示在 2020-03-06 创建的项目列表。
:: 已编辑 ::
这是我的名为“Profile”的领域对象,日期从 2020-03-05 至 2020-03-08 .
这是我的 Profile 对象和 ProfileManager Singleton。
class Profile: Object {
@objc dynamic var date: Date!
@objc dynamic var content: String!
convenience init(_ content: String) {
self.init()
self.content = content
self.date = Date()
}
}
class ProfileManager {
static let shared = ProfileManager()
private var realm = try! Realm()
var profileList: Results<Profile>?
private init() {
profileList = realm.objects(Profile.self)
}
func save(_ object: Profile) {
do {
try realm.write {
realm.add(object)
}
} catch {
print(error)
}
}
func addNewProfile(_ content: String) {
let newProfile = Profile(content)
save(newProfile)
}
}
最后,这是一个带有按钮的 viewController。一为 添加新配置文件,以及一个用于打印过滤配置文件列表的配置文件。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func addProfilePressed(_ sender: Any) {
ProfileManager.shared.addNewProfile("profile content")
}
@IBAction func filterButtonPressed(_ sender: Any) {
let stringDate = "2020-03-09"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let searchDate:Date = dateFormatter.date(from: stringDate)!
let results = ProfileManager.shared.profileList!.filter("date == %@", searchDate)
print(searchDate)
print(results)
for profile in results {
print(profile.content!)
}
}
}
调用 filterButtonPressed 方法时控制台上的结果。
2020-03-08 15:00:00 +0000
Results<Profile> <0x7f9b36f160a0> (
)
我该如何解决这个问题? 这是另一个问题。 我将“stringDate”的值设置为“2020-03-09” 但是当我打印转换日期 'searchDate' 时,它会打印“2020-03-08” 为什么会这样?
希望现在我的问题更容易理解。
【问题讨论】:
-
请在问题中发布代码,而不是图像。
-
@Willeke 好的,完成。
-
我将您编辑的代码复制并粘贴到一个项目中,它工作正常。但是,请注意您正在搜索
let stringDate = "2020-03-09",并且该日期为 09 的日期在问题中显示的数据集中不存在,因此不会有任何结果。 -
@Jay 很奇怪,使用相同的代码,它对你有用,对我不起作用。我知道没有 09 天,我尝试了任何数字和相同的结果。当我输入数字时,它会在 stringDate 前一天打印。在这种情况下,它会打印我 2020-03-08 .. 无论如何都想解决这个问题,但不知道......
-
等一下。我复制了它。让我回复你。