【问题标题】:fatal error: value failed to bridge from Swift type to a Objective-C type致命错误:值无法从 Swift 类型桥接到 Objective-C 类型
【发布时间】:2014-11-19 08:05:19
【问题描述】:

我正在尝试使用新的NSBatchUpdateRequestCore Data 写入一些信息,但不知道为什么会出现此错误。有人可以解释这里发生了什么吗?听起来我在将 Swift 转换为 Objective-C 类型值时遇到了问题?

fatal error: value failed to bridge from Swift type to Objective-C type

这是我发生错误的代码块:

func updateUser(user: User) {
    var batchRequest = NSBatchUpdateRequest(entityName: "User")

    if doesUserExist(user.userId) {
        batchRequest.predicate = NSPredicate(format: "userId == %@", user.userId)
    }

    batchRequest.propertiesToUpdate = [
        "userId" : user.userId,
        "username" : user.username,
        "email" : user.email,
        "fullName" : user.fullName,
        "gender" : user.gender,
        "birthdate" : user.birthdate,
        "zipCode" : user.zipCode,
        "aboutMe" : user.aboutMe,
        "iAm" : user.iAm,
        "iLike" : user.iLike,
        "favoriteWeapon" : user.favoriteWeapon,
        "dateCreated" : user.dateCreated,
        "lookingFor" : user.lookingFor,
        "minAge" : user.minAge,
        "maxAge" : user.maxAge,
        "distance" : user.distance,
        "gameOwned" : user.gameOwned,
        "gameSetting" : user.gameSetting,
        "allowedList" : user.allowedList,
        "blockedList" : user.blockedList,
        "avatarType" : user.avatarType
    ]
    batchRequest.resultType = .UpdatedObjectsCountResultType
    var error : NSError?
    var results = self.managedObjectContext!.executeRequest(batchRequest, error: &error) as NSBatchUpdateResult
    if error == nil {
        println("Updated User: \(user.username) \(results.result)")
    }
    else {
        println("Update User Error: \(error?.localizedDescription)")
    }
}

我收到错误的代码行是:

var results = self.managedObjectContext!.executeRequest(batchRequest, error: &error) as NSBatchUpdateResult

用户对象

class User: NSManagedObject {

@NSManaged var aboutMe: String
@NSManaged var avatarType: String
@NSManaged var birthdate: NSDate
@NSManaged var cityState: String
@NSManaged var dateCreated: NSDate
@NSManaged var distance: NSNumber
@NSManaged var email: String
@NSManaged var favoriteWeapon: String
@NSManaged var fullName: String
@NSManaged var gameOwned: AnyObject
@NSManaged var gameSetting: AnyObject
@NSManaged var gender: String
@NSManaged var iAm: String
@NSManaged var iLike: String
@NSManaged var lastMatch: NSDate
@NSManaged var lookingFor: String
@NSManaged var maxAge: NSNumber
@NSManaged var minAge: NSNumber
@NSManaged var pictureUrl: String
@NSManaged var userId: String
@NSManaged var username: String
@NSManaged var zipCode: String
@NSManaged var allowedList: String
@NSManaged var blockedList: String

}

【问题讨论】:

  • 你能显示你的用户对象定义吗?
  • @MikeTaverne 添加了用户对象定义。

标签: ios core-data swift


【解决方案1】:

您的用户对象很可能具有目标 c 中不可用的 swift 特定功能,例如枚举、元组、泛型等。

【讨论】:

    【解决方案2】:

    这可能是编译器中的问题,是由您的快速优化引起的。一种对我有用的解决方案是

    1. 点击左侧边栏中的目标。
    2. 点击构建设置
    3. 搜索“优化级别”
    4. 根据需要更改值(我们必须将优化级别设置为 -Onone 以修复错误)

    来源:How to Change the Optimization Level in Xcode 6 for Swift

    【讨论】:

      【解决方案3】:

      您应该将所有包含数据的变量转换为字符串数据类型。也许您的“AnyObject”或“Date”数据类型造成了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-18
        • 2015-07-18
        • 1970-01-01
        • 2015-10-16
        • 1970-01-01
        • 2014-12-09
        相关资源
        最近更新 更多