Xcode ';无法识别的选择器发送到实例';将数据保存到核心数据时
我有两个班,品牌和产品。品牌具有以下属性:名称和产品与产品的关系(一对多);而产品有属性:名称和关系(一对一)品牌对品牌 以下是错误发生的方式:Xcode ';无法识别的选择器发送到实例';将数据保存到核心数据时,xcode,core-data,Xcode,Core Data,我有两个班,品牌和产品。品牌具有以下属性:名称和产品与产品的关系(一对多);而产品有属性:名称和关系(一对一)品牌对品牌 以下是错误发生的方式: 有两个品牌Brand1和Brand2。当我保存P1,P2时。。。对于Brand1来说,它工作得很好。但如果我试图将新产品保存到Brand2,则会显示错误: -[Brand compare:]:无法识别的选择器发送到实例 我找了整整一个下午的原因,没有结果。有人知道如何解决这个问题吗 以下是添加新产品的代码: - (void)addProduct:(
有两个品牌Brand1和Brand2。当我保存P1,P2时。。。对于Brand1来说,它工作得很好。但如果我试图将新产品保存到Brand2,则会显示错误:
-[Brand compare:]:无法识别的选择器发送到实例
我找了整整一个下午的原因,没有结果。有人知道如何解决这个问题吗
以下是添加新产品的代码:
- (void)addProduct:(NSString *)name brandOfProduct:(Brand *)brand
{
Product *newProduct = [NSEntityDescription insertNewObjectForEntityForName:@"Product" inManagedObjectContext:self.coreDataManager.managedObjectContext];
newProduct.name = name;
[brand addProductsObject:newProduct];
NSError *error;
[self.coreDataManager.managedObjectContext save:&error];
}
此处的“品牌”是指在选择器视图中选择的一个用户
Brand *brand = [[self.fetchedResultsController fetchedObjects] objectAtIndex:row];
更新1:当[self.coreDataManager.managedObjectContext保存:&error]时显示错误调用code>将新产品保存到Brand2
错误消息:
CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获异常。这通常是NSManagedObjectContextObjectsIDChangeNotification的观察者中的错误-[品牌比较:]:无法识别的选择器发送到实例0x1092d97a0,带有userInfo(null)
更新2:我找到了导致此错误的原因:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView beginUpdates];
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
UITableView *tableView = self.tableView;
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView endUpdates];
}
您应该显示一些代码。@Volker抱歉,这是我的代码,请看一看。异常的堆栈跟踪是什么?你是否自动生成了这些类?关系是否相反?您是否确保brand确实是一个brand
对象,以及您是否在主线程上运行?错误到底在哪里抛出?@Wain是的,它们是自动生成的,并且关系是相反的<代码>CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获异常。这通常是NSManagedObjectContextObjectsIDChangeNotification的观察者中的一个错误。
这就是错误所在。