Swift:无法将类型Swift.Int16的值转换为Swift.AnyObject
当我运行下面的代码行时,收到错误消息'无法将类型Swift.Int16的值转换为Swift.AnyObject'。上线时出现错误:Swift:无法将类型Swift.Int16的值转换为Swift.AnyObject
'newWorkout.setValue(totalTimeConverted为AnyObject,forKey: “workoutTime”)'
锻炼是我的实体的名称。它有两个属性;
类型的NSDate
-
类型的Int16的workoutTime的workoutDate。
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate let context: NSManagedObjectContext = appDel.managedObjectContext let newWorkout = NSEntityDescription.insertNewObjectForEntityForName("Workout", inManagedObjectContext: context) as! Workout let totalTimeConverted = Int16(totalTime) // Add parameters newWorkout.setValue(totalTimeConverted as! AnyObject, forKey: "workoutTime") newWorkout.setValue(NSDate(), forKey: "workoutDate") do { try context.save() } catch { print("Error saving data") } do { let request = NSFetchRequest(entityName: "Workout") let results = try context.executeFetchRequest(request) if results.count > 0 { for item in results as! [NSManagedObject]{ let time = item.valueForKey("workoutTime") let workoutDate = item.valueForKey("workoutDate") print(time!, workoutDate!) } } } catch{ print("Error loading data") }
您不能投Int16
到AnyObject
。它是价值型而不是阶级。
您可以使用NSInteger
做适当的类型转换
newWorkout.setValue(NSInteger(totalTimeConverted), forKey: "workoutTime")
谢谢,这个作品完美。我可以问我执行代码时,workoutDate的值是否为零。这是为什么? –
没有明显的原因,为什么它是零。你需要做一些调试。 –
这是因为Int16
是一种原始的,没有反对,只是是不是可以转换为“AnyObject”。
由于Dalija Prasnikar's answer指出,你可以将你的号码包装成一个NSNumber对象。
林新使用coredata,并得到了推荐这种方法。当我将代码更改为该代码时,出现错误'Type'Workout'没有下标成员' –
没问题。无论如何感谢您的回复! –
你为什么铸造'AnyObject'? –