【问题标题】:iOS - Swift and Parse error regarding Optionals within SubclassiOS - 关于子类中的选项的 Swift 和 Parse 错误
【发布时间】: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


【解决方案1】:

您是否尝试添加 ?像这样: self.object?.username = username

【讨论】:

  • 感谢您消除了错误 :) 现在找出为什么它没有保存到 Parse 后端,但我认为这是另一天的另一个问题,哈哈
  • 等等,没关系,现在我应用于对象的任何内容都是零?即使给它硬编码值“7”,它仍然被存储为一个 nil 变量。
  • 我就是这么想的。我认为有一个稍微大一点的问题。但我需要阅读 Parse 上的文档
  • 你必须在你正在初始化的地方发布你的代码self.object
  • 代码 var object: Fillup?object 初始化为 nil。有意义的是,您尝试在对象中“保存”的所有内容都将显示为 nil,因为 object 本身为零。您需要通过调用来实际初始化对象,例如self.object = Fillup()(或任何指定的初始化程序)。这基本上就是我在对您的其他问题的评论中所得到的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多