致命错误:值无法从Swift类型桥接到Objective-C类型 [英] fatal error: value failed to bridge from Swift type to a Objective-C type

查看:287
本文介绍了致命错误:值无法从Swift类型桥接到Objective-C类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用新的 NSBatchUpdateRequest 核心数据写一些信息,我得到这个错误。有人可以解释这里发生了什么吗?听起来像我无法将Swift转换为Objective-C类型值?

 致命错误:值无法从Swift类型为Objective-C类型

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

  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(更新用户错误:\(错误?.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

}

解决方案>

您应该将所有包含数据的变量转换为String数据类型。也许你的AnyObject或Date数据类型正在创建问题。


I am trying to write some info to Core Data using the new NSBatchUpdateRequest and can't figure out why I am getting this error. Can someone explain what is going on here? It sounds like I am having trouble converting a Swift to Objective-C type value?

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

Here is my block of code that the error is taking place in:

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

The line of code that I am getting the error on is:

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

User Object

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

}

解决方案

You should convert all your variables containing data to String data type. Maybe your 'AnyObject' or 'Date' datatypes are creating the problem.

这篇关于致命错误:值无法从Swift类型桥接到Objective-C类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆