我正在使用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来代替。
有谁知道为什么以及如何解决这个问题?
你的fetchedResultsController的实现是什么样的?如果提取请求错误(例如,错误的NSEntityDescription,错误的谓词语法等),那么您可能不会得到正确类型的管理对象。此外,如果你只是NSLog()contactList对象而不是调用toString就会发生什么呢? – Echelon 2010-09-20 15:20:40
嘿埃施朗,我添加了我的fetchedResultsController实现,但它非常标准。 NSLog(@“%@”,contactList)给我:(实体:ContactList; id:0x6a04180 ; data: ) –
Sebastian
2010-09-20 15:32:12