我可能会以错误的方式进行操作,我正在尝试调用实体子类的方法。
func addPlayer(_name: String, _team: String, _position: String, _stats: NSDictionary){
let managedContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let entity = NSEntityDescription.entityForName("Player", inManagedObjectContext: managedContext)
let player = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)
player.setValue(_name, forKey: "name")
player.setValue(_position, forKey: "position")
player.setValue(_team, forKey: "teamAbbr")
player.setValue(player.calculateTradeValue() as! Player, forKey: "tradeValue")
最后一行给我一个错误
Value of type NSManagedObject has no member calculateTradeValue
最佳答案
好,所以我有几个问题。
1)您在项目中使用CoreData吗?这就是我所猜测的,因为您使用了ManagedObjectContext,在这种情况下,我假设您已经在数据模型中创建了一个名为Player的实体?
2)如果您和命名约定尽可能一致,那么您和其他人将更容易阅读代码。我建议命名您的“ managedContext”->“ managedObjectContext”。它看起来似乎无关紧要,但这是一种很好的实践。
3)我建议在函数外声明您的managedObjectContext;现在,您的代码中唯一可以访问ManagedObjectContext中保存的内容的位置就是此函数。如果在任何函数之外的类的顶部声明它,则可以在整个类中对其进行访问。
4)我不确定如何告诉您如何解决实际问题,但看看如何将我的代码组合在一起以将对象的新实例插入managedObjectContext。在CoreData中,我有一个名为Flick的实体,其中包含诸如flickTitle,flickReleaseDate,flickDirector等属性。
var currentFlick: Flick?
let entityDescription: NSEntityDescription! = NSEntityDescription.entityForName("Flick", inManagedObjectContext: appDelegate.managedObjectContext)
currentFlick = Flick(entity: entityDescription, insertIntoManagedObjectContext: appDelegate.managedObjectContext)
现在,您可以自由地编写一个获取方法,该方法将进入您的ManagedObjectContext并提取数据供您随意使用。我知道很多,但我希望至少有一部分可以帮助您到达想要的位置!