如何以编程方式创建NSFetchedPropertyDescription?

| 我有一个用Xcode GUI创建的ѭ0。我想创建一个排序的访存属性,Xcode 3.2的GUI不支持该属性。在创建ѭ1之前,我会做所有这些事情,因为我知道在对象图管理器开始使用ѭ0之后,您将无法对其进行修改。因此,我创建了
NSFetchedPropertyDescription
NSManagedObjectModel *managedObjectModel = ... // fetch from my mainBundle

NSEntityDescription *fetchedPropertyEntityDescription = [entitiesByName objectForKey:@\"MyEntity\"];

NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setEntity:fetchedPropertyEntityDescription];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@\"myPredicateProperty == $FETCH_SOURCE\"]];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@\"mySortProperty\" ascending:YES]]];

NSFetchedPropertyDescription *fetchedPropertyDescription = [[[NSFetchedPropertyDescription alloc] init] autorelease];
[fetchedPropertyDescription setFetchRequest:fetchRequest];
[fetchedPropertyDescription setName:@\"myFetchedProperty\"];

NSEntityDescription *entityDescription = [entitiesByName objectForKey:@\"MyFetchSourceEntity\"];

[entityDescription setProperties:[[entityDescription properties] arrayByAddingObject:fetchedPropertyDescription]];
当我打电话
[fetchedPropertyDescription setFetchRequest:fetchRequest];
我得到以下异常:
NSInvalidArgumentException: Can\'t use fetch request with fetched property description (entity model mismatch).
    
已邀请:
一旦将托管对象模型用于创建对象图,即在存在上下文或使用它的商店之后,您将无法对其进行更改。该模型定义图形中所有对象的属性和关系。如果您即时更改它,该图将变成乱码。 这也适用于获取的属性。从NSFetchProperyDescription文档中:   获取的属性描述为   可编辑,直到它们被   对象图管理器。这可以让你   动态创建或修改它们。   但是,一旦使用了描述   (当管理对象模型   它所属的与   持久性存储协调器),它必须   (实际上不能)更改。这个   在运行时强制执行:   改变模型或其任何主题   在模型与   持久性存储协调器导致   抛出异常。如果你需要   修改正在使用的模型,创建   副本,修改副本,然后   丢弃旧物件   模型。     
我需要在
NSFetchedPropertyDescription
上设置
NSFetchRequest
之前将
NSFetchedPropertyDescription
添加到
NSEntityDescription
中。 正确的步骤如下:
NSManagedObjectModel *managedObjectModel = ... // fetch from my mainBundle

NSEntityDescription *fetchedPropertyEntityDescription = [entitiesByName objectForKey:@\"MyEntity\"];

NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setEntity:fetchedPropertyEntityDescription];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@\"myPredicateProperty == $FETCH_SOURCE\"]];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@\"mySortProperty\" ascending:YES]]];

NSFetchedPropertyDescription *fetchedPropertyDescription = [[[NSFetchedPropertyDescription alloc] init] autorelease];
//DON\'T DO THIS HERE, AN ERROR WILL OCCUR
//[fetchedPropertyDescription setFetchRequest:fetchRequest];
//
[fetchedPropertyDescription setName:@\"myFetchedProperty\"];

NSEntityDescription *entityDescription = [entitiesByName objectForKey:@\"MyFetchSourceEntity\"];

[entityDescription setProperties:[[entityDescription properties] arrayByAddingObject:fetchedPropertyDescription]];

//DO THIS HERE INSTEAD
[fetchedPropertyDescription setFetchRequest:fetchRequest];
    

要回复问题请先登录注册