【发布时间】:2015-07-10 16:04:07
【问题描述】:
我实现了一个名为Filler.swift 的 Parse 子类,其中包含五个保存在 Parse 后端的变量。
在尝试使用此子类将数据保存到 Parse 后端时,我收到错误:fatal error: unexpectedly found nil while unwrapping an Optional value。
这是导致错误的代码(在 self.object.username = username 行):
if let username = PFUser.currentUser()?.username {
// set username equal to current user
self.object.username = username
}else{
println("PFUser.currentUser()?.username contained a nil value.")
}
我发现这与我在子类中处理可选变量的方式有关,但 Parse 文档并不清楚具体如何执行此操作。这是我的子类代码:
class Fillup : PFObject, PFSubclassing {
var amount : String? {
get {
return self["amount"] as? String
}
set{
self["amount"] = newValue
}
}
var cost : String? {
get {
return self["cost"] as? String
}
set{
self["cost"] = newValue
}
}
var date : NSDate {
get {
return self["date"] as! NSDate
}
set{
self["date"] = newValue
}
}
var username: String? {
get{
return self["username"] as? String
}
set {
self["username"] = newValue
}
}
var id : Int?{
get {
return self["id"] as? Int
}
}
override class func initialize() {
var onceToken : dispatch_once_t = 0;
dispatch_once(&onceToken) {
self.registerSubclass()
}
}
class func parseClassName() -> String {
return "Fillup"
}
}
任何帮助将不胜感激。
【问题讨论】:
-
我写了一个 python 脚本来自动为你生成这些子类 (github.com/Grepstar/GSParseSchema)。您需要将您的属性定义为可选项,就像您在上面所做的那样,因为您不能保证任何属性的非零值。在您的情况下,您似乎正在尝试访问 currentUser 由于没有用户登录而可能为零。您的子类化看起来不错。
-
Parse SDK 可以在后台自动生成访问这些属性的代码。检查:parse.com/docs/ios/guide#objects-subclasses
标签: ios swift parse-platform subclass optional