2014-06-22 96 views
3

我有一个相当奇怪的情况,在使用Swift进行实验时发生核心数据错误。我不确定它是否来自Swift(测试版错误?)或者它是否是我。不过,这里是我的测试用例的设置(在VTModelTests.swift中)。insertNewObjectForEntityForName的奇怪行为导致NSInternalInconsistencyException

var bundle = NSBundle(forClass: VTModelTests.self) 
var url = bundle.URLForResource("VTDocument", withExtension:"momd") 
appleModel = NSManagedObjectModel(contentsOfURL: url) 
assert (appleModel != nil) 
var coord = NSPersistentStoreCoordinator(managedObjectModel: appleModel); 
var store = coord.addPersistentStoreWithType(NSInMemoryStoreType,configuration:nil,URL:nil,options:nil,error:nil); 
assert (store != nil) 
ctx = NSManagedObjectContext(); 
ctx!.persistentStoreCoordinator=coord 
ctx!.retainsRegisteredObjects=true; 

var drwName = "Drawing" 
var descs = ctx!.persistentStoreCoordinator.managedObjectModel.entitiesByName 
for e : AnyObject in descs.allKeys{ 
    assert (descs.objectForKey(e).name == e as String) 
    if (e as String == drwName) { 
     NSLog("yeah") 
    } 
} 
model = NSEntityDescription.insertNewObjectForEntityForName(drwName,inManagedObjectContext: ctx) as Drawing 

我的错误信息是这样的:

2014-06-22 22:12:25.584 xctest[63792:303] yeah 
<unknown>:0: error: -[_TtC12VTModelTests12BaseTypeTest testTreeStructure] : failed: caught "NSInternalInconsistencyException", "+entityForName: could not locate an entity named 'Drawing' in this model." 

总之,我可以“证明”该实体名称是存在的(即“耶”在日志),但核心数据显示名称不在模型中的问题。循环的先前版本打印出实体,看起来不错。我没有任何第二个版本,并且在打印所有实体时,模型数据中正确显示了一个新的更改名称('Model'现在称为'Drawing')。编译后的模型位于结果包中。

有人可以解释一下吗?还是必须等待Xcode 6的下一个beta版?我还忽略了什么?提前谢谢了!

回答

6

我可以证实这个问题。不是一个答案,但我使用的方式是将insertNewObjectForEntityForName分割为:

let entity = NSEntityDescription.entityForName("Photo", inManagedObjectContext:context) 
let photo = Photo(entity:entity, insertIntoManagedObjectContext:context) 
相关问题