发出调用快速完成处理程序关闭的问题
Posted
技术标签:
【中文标题】发出调用快速完成处理程序关闭的问题【英文标题】:Issue calling swift completion handler closure 【发布时间】:2014-07-04 10:42:47 【问题描述】:我有一个将闭包作为完成处理程序的函数。它反过来调用一个也接受一个函数的函数。完成后,我想从第一个完成闭包中获取返回值并调用第二个完成闭包。
func saveUserToCloud(user: MBUser, completionHandler: (CKRecord, NSError) -> Void)
let userRecord = CKRecord(recordType: kMBUser)
userRecord.setObject(user.nickname, forKey: kMBUserNickname)
self.publicDb.saveRecord(userRecord, completionHandler: record, error in completionHandler(record, error))
这个函数抛出异常:
致命错误:无法打开 Optional.None
func saveUserToCloud(user: MBUser, completionHandler: (CKRecord, NSError) -> Void)
let userRecord = CKRecord(recordType: kMBUser)
userRecord.setObject(user.nickname, forKey: kMBUserNickname)
// this line throws the exception:
self.publicDb.saveRecord(userRecord, completionHandler: record, error in completionHandler(record, error))
我做错了什么?我有记录,在这种情况下没有错误。我想它正在尝试解开错误?
谢谢
【问题讨论】:
user
不是调用中的可选值吗?我会检查 user
对象在状态上是否正确。 编辑: 也许也检查这个 SO 答案,似乎是一个相关问题: ***.com/a/24035639/250164
【参考方案1】:
您的昵称属性可能是 MBUser 对象中的可选属性。您可以将其设为非可选,或者如果您知道它已在此函数中设置,请使用以下命令强制执行:
userRecord.setObject(user.nickname!, forKey: kMBUserNickname)
如果昵称是 nil 那么你会在这里得到错误 我不认为问题出在你的completionHandler
【讨论】:
以上是关于发出调用快速完成处理程序关闭的问题的主要内容,如果未能解决你的问题,请参考以下文章
未调用dismissViewController 完成处理程序