0

我正在使用CoreData并定义了一个实体ContactList,它是使用XCode xcdatamodel工具(或任何您称之为内置事物:)创建的。我还将实体的类名称设置为“ContactList”。然后我使用rentzsch的mogenerator(http://github.com/rentzsch/mogenerator)生成我的自定义类文件,并将简单方法“toString”添加到我的ContactList类中。NSFetchedResultsController总是返回NSManagedObject对象,而不是自定义

的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来代替。

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

+0

你的fetchedResultsController的实现是什么样的?如果提取请求错误(例如,错误的NSEntityDescription,错误的谓词语法等),那么您可能不会得到正确类型的管理对象。此外,如果你只是NSLog()contactList对象而不是调用toString就会发生什么呢? – Echelon 2010-09-20 15:20:40

+0

嘿埃施朗,我添加了我的fetchedResultsController实现,但它非常标准。 NSLog(@“%@”,contactList)给我:(实体:ContactList; id:0x6a04180 ; data: ) – Sebastian 2010-09-20 15:32:12

回答

1

好的,我想通了。

问题在于mogenerator脚本没有将其生成的源文件添加到项目的编译目标中。这种方式从来没有编译和包括的类(我不知道它是如何工作,没有任何模型对象类:)

将.xcdatamodel文件添加到目标(RightClick on .xcdatamodel文件 - >目标 - >检查您的项目)现在一切正常。

如需进一步信息去here

2

我有同样的问题 - 造成的,因为我以前曾改名为实体的管理对象子类。在数据建模器中,确保在实体的检查器中,“名称”和“类”都设置正确。

相关问题