2016-08-03 32 views
-1

当我运行下面的代码行时,收到错误消息'无法将类型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") 
    } 
    
+1

你为什么铸造'AnyObject'? –

回答

0

您不能投Int16AnyObject。它是价值型而不是阶级。

您可以使用NSInteger做适当的类型转换

newWorkout.setValue(NSInteger(totalTimeConverted), forKey: "workoutTime") 
+0

谢谢,这个作品完美。我可以问我执行代码时,workoutDate的值是否为零。这是为什么? –

+0

没有明显的原因,为什么它是零。你需要做一些调试。 –

0

这是因为Int16是一种原始的,没有反对,只是是不是可以转换为“AnyObject”。

由于Dalija Prasnikar's answer指出,你可以将你的号码包装成一个NSNumber对象。

+0

林新使用coredata,并得到了推荐这种方法。当我将代码更改为该代码时,出现错误'Type'Workout'没有下标成员' –

+0

没问题。无论如何感谢您的回复! –

相关问题