NSFetchedResultsController始终返回NSManagedObject对象而不是自定义

时间:2010-09-20 14:36:52

标签: objective-c core-data nsfetchedresultscontroller nsmanagedobject

我正在使用CoreData并定义了一个Entity ContactList,我使用XCode xcdatamodel工具(或者你称之为内置的东西:)创建了它。我还将实体的类名设置为“ContactList”。然后我使用rentzsch的mogenerator(http://github.com/rentzsch/mogenerator)生成我的自定义类文件,并将简单方法“toString”添加到我的ContactList类。

fetchedResultsController回调非常标准,如下所示:

- (NSFetchedResultsController *)fetchedResultsController {

if (fetchedResultsController_ != nil) {
    return fetchedResultsController_;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"ContactList" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];

NSError *error = nil;
if (![fetchedResultsController_ performFetch:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

return fetchedResultsController_;
}    

现在,当我启动我的应用程序并尝试在“ContactList”对象上调用该方法时,我将从NSFetchedResultsController获取

ContactList *contactList = (ContactList *) [self.fetchedResultsController objectAtIndexPath:indexPath];
[contactList toString];    
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObject toString]: unrecognized selector sent to instance 0x6af7bf0'

如消息所示,NSFetchedResultsController以某种方式不返回“ContactList”对象,而是返回更通用的NSManagedObject。

有谁知道为什么以及如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题 - 因为我之前已经重命名了Entity的Managed Object子类。在Data Modeler中,确保在实体的检查器中,“名称”和“类”都已正确设置。

答案 1 :(得分:1)

好的,我想出来了。

问题是mogenerator脚本没有将生成的源文件添加到项目的编译目标中。这样,这些类永远不会被编译和包含(我想知道它如何在没有任何模型对象类的情况下工作:)

将.xcdatamodel文件添加到目标后(右键单击.xcdatamodel文件 - >目标 - >检查项目)现在一切正常。

有关详细信息,请转到here