我已经使用 Xcode 6 beta 2 在一个小的 iPhone 项目上测试了 swift。
该项目使用核心数据访问数据模型中的 2 个实体(用户/契约(Contract))。在 IOS 模拟器中一切正常。
问题:当我为 IOS7 构建应用程序并在我的 iPhone5s(运行 IOS 7.1.1)上测试该应用程序时,该程序只能将数据保存到第一个实体(如核心数据模型 = 用户中所定义)。对于所有其他实体, NSEntityDescription.entityForName(...) 为“nil”。在 managedObjectModel (println(managedObjectModel)) 中包含所有实体。似乎数据模型不正确包含在 IOS7 上的 SQL 数据库中?!有没有人有解决方案/想法?谢谢:-)
var myAppDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
var myContext:NSManagedObjectContext = myAppDel.managedObjectContext
println(NSEntityDescription.entityForName("User", inManagedObjectContext: myContext))
println(NSEntityDescription.entityForName("Contract", inManagedObjectContext: myContext))
var newContract:AnyObject = NSEntityDescription.insertNewObjectForEntityForName("Contract", inManagedObjectContext: myContext)
newContract.setValue("" + txtContract.text, forKey: "contractName")
myContext.save(nil)
var newUser = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: myContext)
newUser.setValue("" + txtUsername.text, forKey: "userName")
newUser.setValue("" + txtPassword.text, forKey: "userPass")
newUser.setValue(newContract, forKey: "contracts") // Save Relationship
myContext.save(nil)
错误: 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“+entityForName:无法在此模型中找到名为“Contract”的实体。”
最佳答案
目前看来是个bug。如这篇文章所述:https://devforums.apple.com/message/996259#996259 .
此错误的解决方法是使用 NSString 而不是传递 String 作为实体名称:
let myEntity: NSString = "EntityName"
var fetchRequest = NSFetchRequest(entityName: myEntity)
关于ios - Swift:IOS7 设备上的核心数据 -> 第二个实体上的 entityForName 为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24440927/