0

我正在使用 CoreData 并定义了一个实体 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。

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

4

2 回答 2

2

我遇到了同样的问题 - 因为我之前重命名了实体的托管对象子类。在数据建模器中,确保在实体的检查器中,“名称”和“类”都设置正确。

于 2012-01-12T20:46:42.097 回答
1

好的,我想通了。

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

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

欲了解更多信息,请点击此处

于 2010-09-22T14:15:45.403 回答