我可能会以错误的方式解决这个问题,我试图调用实体子类的方法。
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
答案 0 :(得分:0)
好的,我有几个问题。 1)您是否在项目中使用CoreData?由于您使用了managedObjectContext,我猜测的是,我假设您已经在数据模型中创建了一个名为Player的实体?
2)如果您与命名约定尽可能一致,那么您和其他人可以更轻松地阅读您的代码。我建议命名你的" managedContext" - > " managedObjectContext&#34 ;.它似乎微不足道,但它是一个很好的做法。
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)
现在,您可以自由编写一个fetch方法,该方法会进入您的managedObjectContext并将该数据拉出来供您随时使用,但是您不喜欢。我知道这很多,但我希望至少有一些可以帮助你达到你想要的目标!