ios - Swift 2 中的错误域处理

标签 ios swift validation core-data error-handling

我有以下来自 Swift 1.2 教程的代码,我无法将其转换为 Swift 2:

var val: AnyObject? = self.value
var error: NSError?
if !self.myManangedObject.validateValue(&val, forKey: self.key, error: &error) {
    var message: String!
    if error?.domain == "NSCocoaErrorDomain" {
        var userInfo:NSDictionary? = error?.userInfo
        var errorKey = userInfo?.valueForKey("NSValidationErrorKey") as String
        var reason = error?.localizedFailureReason
        message = NSLocalizedString("Validation error on \(errorKey)\rFailure Reason:\(reason)", comment: "Validation error on \(errorKey)\rFailure Reason: \(reason)")
    } else {
        message = error?.localizedDescription
    }
    // Create some alerts with the message
}

第一行中的 self.value 指的是 CoreData 属性的值。

我知道我需要将代码更改为 do { try } catch { } 结构。我猜第 3 行看起来像这样:

try self.myManagedObject.validateValue(&val, forKey: self.key) 

但是,这不起作用,因为 Xcode 首先建议删除指针,然后说

"Cannot convert value of type 'AnyObject?' to expected argument type 'AutoreleasingUnsafeMutablePointer (...)"

此外,我不确定如何处理 error?.domain 语句。通过搜索互联网,我发现的示例建议在枚举中处理错误类型,但我看不出这将如何适用于此处。

顺便说一句,是否可以使用当前版本的 Xcode 将这段代码从 Swift 1.2 更新到 2.0?

最佳答案

以下是您尝试执行的操作的最小工作示例:

var mgc : NSManagedObjectContext!
var any : AnyObject?

do {
    let valid = try mgc.validateValue(&any, forKey: "myKey")
    // branch based on the valid
} catch let error as NSError {
    // here you go with your error handling
}

你能从这里拿走吗?

关于ios - Swift 2 中的错误域处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36559542/

相关文章:

php - 使用 PHP 和 javascript 进行 HTML 表单验证的简单方法

iphone - Apple Mach-O Linker Errors (20) - 架构armv7的 undefined symbol

ios - 为什么我不能按 CTRL 键拖动 Storyboard的 Action ?

ios - 是否有根据日期修改 Realm 对象而不必显式添加日期作为属性的方法?

ios - 如何为选项卡栏 View Controller 中的第一个选项卡获取新的 View Controller 而不是父 View ?

swift - 如何使用动画仅转换 View 的按钮边缘

ios - 无法打开 Promise<[CLPlacemark]>

forms - 如何强制 Angular 2 重新检查验证器?

ios - CIPhotoEffect CIFilters 在颜色管理方面是不变的。是什么赋予了 CIPhotoEffect 滤镜这个属性?

javax.validation.ConstraintValidationException : validation failed for classes