问题调用swift完成处理程序关闭

时间:2014-07-04 10:42:48

标签: ios swift

我有一个函数,它将一个闭包作为一个完成处理程序。它反过来调用一个也需要一个的函数。完成后,我想从第一个完成闭包中获取返回值,并调用第二个完成闭包。

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)})
    }
}

我做错了什么?我有一个记录,在这种情况下没有错误。我想它正试图解开错误?

由于

1 个答案:

答案 0 :(得分:0)

您的nickname属性可能是MBUser对象中的可选属性。您可以将其设为非可选项,或者如果您知道此功能中的设置,则执行以下操作:

userRecord.setObject(user.nickname!, forKey: kMBUserNickname)

如果昵称为零,那么您将在此处收到错误 我不认为问题是你的完成手柄