【发布时间】:2016-07-28 08:57:00
【问题描述】:
我正在制作一个日历应用程序。我有一组选定的日期。用户之前选择了它并存储在那里。
var selectedDays = [NSDate]()
当应用加载时,我必须显示这些日期,但一切都过于复杂,因为 Firebase 不接受 NSDate
我有另一个数组var selectedDaysForFirebase = [String](),它与上面的数组相同,只是日期被转换为字符串以适应 Firebase。
这是我保存选定日期的方式:
// 1. Append converted date into selectedDaysForFirebase array
let day = dateFormatter.stringFromDate(date)
selectedDaysForFirebase.append(day)
// 2. Push data to Firebase
ref.childByAppendingPath("dates").setValue(selectedDaysForFirebase)
我的 Firebase 有用户身份验证。所以每个用户都有自己的带有日期的小数据库。
在我的viewDidLoad 中,我必须从 Firebase 中获取该日期数组并将其存储在我的 selectedDates 数组中,该数组接受 NSDate
ref.childByAppendingPath("dates").observeEventType(.Value, withBlock: { snapshot in
if let dates = snapshot.value as? NSArray {
print(dates)
// convert firebase array of dates with array of dates that only accepts NSDate
}
}, withCancelBlock: { error in
print(error.description)
})
这个输出:
(
"2016-04-10",
"2016-04-11",
"2016-04-12"
)
我认为有更好的方法来存储日期然后检索它,我希望有人可以帮助我。
【问题讨论】:
-
为什么不使用时间戳?
-
哦,我不太熟悉它的工作原理。如何从选定的日期制作输出 NSDate 的印章?
-
您可以使用
dateWithTimeIntervalSince1970:和timeIntervalSinceReferenceDate转换NSDate和NSTimeInterval (double)(反之亦然),并将双精度值存储在FireBase 中。 -
第一次看到这个功能。当用户点击我日历上的某个日期时,它会输出 NSDate,并且在处理点击日期的那个函数中,我必须使用
dateWithTimeIntervalSince1970然后将其存储到 Firebase。你能解释一下这是如何工作的吗? -
我们保存日期的方式实际上是自 1970 年 1 月 1 日以来的时间(以秒为单位)。 NSDate 只是一个可以轻松处理它们的对象(因为它比
1460036331for2016-04-07T13:38:51+00:00更具可读性)。我不使用 FireBase,但我想它可以存储double。所以这可能是一种方法。
标签: swift firebase nsarray firebase-realtime-database