我已经按照这个将您的 swift 应用程序连接到 Parse.com 的教程进行操作:http://ios-blog.co.uk/tutorials/connect-your-swift-application-to-parse-com/效果很好。本教程仅向您展示如何在 Parse.com 服务上放置数据。所以我对如何检索数据做了一些研究。
在第一个教程中,它说要像这样向 Parse 添加数据:
Parse.setApplicationId("your_application_key", clientKey: "your_client_key")
var object = PFObject(className: "testDataClass")
object.addObject("iOSBlog", forKey: "websiteUrl")
object.addObject("Five", forKey: "websiteRating")
object.save()
Parse 团队 (http://blog.parse.com/2014/06/06/building-apps-with-parse-and-swift/) 在第二个教程中说要这样写:
var gameScore = PFObject(className: "GameScore")
gameScore.setObject(1337, forKey: "score")
gameScore.setObject("Sean Plott", forKey: "playerName")
gameScore.saveInBackgroundWithBlock {
(success: Bool!, error: NSError!) -> Void in
if success {
NSLog("Object created with id: \(gameScore.objectId)")
} else {
NSLog("%@", error)
}
}
然后要检索它,请使用此代码:
var query = PFQuery(className: "GameScore")
query.getObjectInBackgroundWithId(gameScore.objectId) {
(scoreAgain: PFObject!, error: NSError!) -> Void in
if !error {
NSLog("%@", scoreAgain.objectForKey("playerName") as NSString)
} else {
NSLog("%@", error)
}
}
但是,当我使用官方解析代码时,出现以下错误:
fatal error: Can't unwrap Optional.None
(lldb)
所有这些事情几乎都发生在 Xcode 的每个面板中:
谁能告诉我哪里出了问题以及如何解决?我对 Xcode 和 Swift 比较陌生,所以我非常感谢外行人的回答。
编辑 这是 appDelegate.swift 函数
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
// Connect to Parse using the keys provided
Parse.setApplicationId("xxx", clientKey: "xxx")
// Store Data to Parse
var gameScore = PFObject(className: "GameScore")
gameScore.setObject(1337, forKey: "score")
gameScore.setObject("Sean Plott", forKey: "playerName")
gameScore.saveInBackgroundWithBlock {
(success: Bool!, error: NSError!) -> Void in
if success {
NSLog("Object created with id: \(gameScore.objectId)")
} else {
NSLog("%@", error)
}
}
var query = PFQuery(className: "GameScore")
query.getObjectInBackgroundWithId(gameScore.objectId) {
(scoreAgain: PFObject!, error: NSError!) -> Void in
if !error {
NSLog("%@", scoreAgain.objectForKey("playerName") as NSString)
} else {
NSLog("%@", error)
}
}
// Override point for customization after application launch.
return true
}
非常感谢。
添加了新代码供用户查看:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
// Connect to Parse using the keys provided
Parse.setApplicationId("xxxx", clientKey: "xxxx")
// Store Data to Parse
var gameScore = PFObject(className: "GameScore")
gameScore.setObject(1337, forKey: "score")
gameScore.setObject("Sean Plott", forKey: "playerName")
gameScore.saveInBackgroundWithBlock {
(success: Bool!, error: NSError!) -> Void in
if (success ?? false) {
NSLog("Object created with id: \(gameScore.objectId)")
} else {
NSLog("%@", error)
}
}
var query = PFQuery(className: "GameScore")
query.getObjectInBackgroundWithId(gameScore.objectId) {
(scoreAgain: PFObject!, error: NSError!) -> Void in
if error == nil {
NSLog("%@", scoreAgain.objectForKey("playerName") as NSString)
} else {
NSLog("%@", error)
}
}
// Override point for customization after application launch.
return true
}
最佳答案
这个 Parse 示例是在 6 月份编写的,当时 Swift 处于 Beta 阶段。 Swift 不断发展,因此他们所做的一些事情在 Swift 中不再合法。
首先,您不能再检查可选变量是否为 error
是nil
与 if !error
.相反,您必须明确检查 nil
像这样:if error == nil
.
其次,success
被声明为隐式展开的可选。检查是否为true
不再有效与 if success
.你可以做 if success == true
但是如果 success
这会崩溃是nil
.相反,你可以做 if (success ?? false)
.这使用 nil 合并运算符 安全地解包可选的 Bool
如果它有一个值或者它使用 false
如果Bool
是nil
.无论哪种方式,if
只有在 Bool
时才会成功是true
.
关于ios - fatal error : Can't unwrap Optional. 无 将 Swift 与 Parse 结合使用时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27077488/