【问题标题】:NSFetchedResultsController always returns NSManagedObject objects instead of customNSFetchedResultsController 总是返回 NSManagedObject 对象而不是自定义
【发布时间】:2010-09-20 14:36:51
【问题描述】:

我正在使用 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。

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

【问题讨论】:

  • 您的 fetchedResultsController 的实现是什么样的?如果获取请求是错误的(例如错误的 NSEntityDescription、错误的谓词语法等),您最终可能不会得到正确类型的托管对象。另外,如果你只是简单地 NSLog() 接触列表对象而不是调用 toString 会发生什么?
  • 嘿梯队,我添加了我的 fetchedResultsController 实现,但它几乎是标准的。 NSLog(@"%@", contactList) 给我: (entity: ContactList; id: 0x6a04180 ; 数据: )

标签: objective-c core-data nsfetchedresultscontroller nsmanagedobject


【解决方案1】:

我遇到了同样的问题 - 因为我之前重命名了实体的托管对象子类。在 Data Modeler 中,确保在 Inspector 中为实体设置了正确的“名称”和“类”。

【讨论】:

    【解决方案2】:

    好的,我想通了。

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

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

    欲了解更多信息,请转到here

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多