我收到以下错误:
无法转换类型' Int16'的值预期参数类型' AnyObject?'
就行了
person.setValue(Time, forKey: "Time")
当我运行这个应用程序时。该函数的框架取自this tutorial,并从String
更改为Int16
,以及实体和属性名称。
var people = [NSManagedObject]()
func saveName(Time: Int16) {
//1
let appDelegate =
UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
//2
let entity = NSEntityDescription.entityForName("Person",
inManagedObjectContext:managedContext)
let person = NSManagedObject(entity: entity!,
insertIntoManagedObjectContext: managedContext)
//3
person.setValue(Time, forKey: "Time")
//4
do {
try managedContext.save()
//5
people.append(person)
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
答案 0 :(得分:3)
正如错误所说,Int16
不是Swift中的对象,因此无法在需要对象的setValue(forKey:)
中使用。尝试将其包装在NSNumber
中,如下所示:
person.setValue(NSNumber(short: Time), forKey: "Time")
答案 1 :(得分:2)
如果你打算使用Int16,你不能像对象那样使用桥接数字类型直接将它作为对象交给Objective-C。 Swift数字不是Objective-C对象,除了像Int和Double这样的简单数字之外,Swift不会帮助你。对于Int16,你必须将其作为NSNumber包装起来。