Iphone 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:“在实体NSSQLEntity CategoryDetail id=2中找不到密钥路径父级”
我在两个实体之间有一对多关系,当用户选择父实体时,我将使用NSFetchedResultsController显示子类别。下面给出了我的抓取代码。 通过观察错误,似乎问题出在数据中心。所以我也附加了虚拟插入代码 当我尝试使用NSFetchResultController访问父实体的子实体时,它给出了以下错误 错误消息 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:“在实体NSSQLEntity CategoryDetail id=2中找不到密钥路径父项”Iphone 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:“在实体NSSQLEntity CategoryDetail id=2中找不到密钥路径父级”,iphone,ios,objective-c,core-data,Iphone,Ios,Objective C,Core Data,我在两个实体之间有一对多关系,当用户选择父实体时,我将使用NSFetchedResultsController显示子类别。下面给出了我的抓取代码。 通过观察错误,似乎问题出在数据中心。所以我也附加了虚拟插入代码 当我尝试使用NSFetchResultController访问父实体的子实体时,它给出了以下错误 错误消息 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:“在实体NSSQLEntity CategoryDetail id=2中找不到密钥路径父
- (void)addData:(NSArray *)array forCategory:(NSArray *)a{
// if(target_iphon)
MouseWaitAppDelegate *delegate=(MouseWaitAppDelegate *)[[UIApplication sharedApplication]delegate];
NSManagedObjectContext *context = [delegate managedObjectContext];
Categories *category1 = [NSEntityDescription
insertNewObjectForEntityForName:@"Categories"
inManagedObjectContext:context];
category1.serverId=[NSNumber numberWithInteger:[[a objectAtIndex:0]integerValue]];
category1.name=[a objectAtIndex:1];
category1.textWidth=[NSNumber numberWithFloat:35.0f];
for (NSDictionary *dic in array)
{
CategoryDetail *cDetail = [NSEntityDescription
insertNewObjectForEntityForName:@"CategoryDetail"
inManagedObjectContext:context];
if ([[dic objectForKey:@"type"] isEqualToString:@"Tabs"])
{
cDetail.serverId=[dic objectForKey:@"ID"];
cDetail.name=[dic objectForKey:@"name"];
cDetail.desc=[dic objectForKey:@"desc"];
cDetail.type=[dic objectForKey:@"type"];
cDetail.orderNo=[NSNumber numberWithInteger:[[dic objectForKey:@"order_no"]integerValue]];
}
else if ([[dic objectForKey:@"type"] isEqualToString:@"events"])
{
cDetail.serverId=[dic objectForKey:@"ID"];
cDetail.name=[dic objectForKey:@"name"];
cDetail.latitude=[dic objectForKey:@"lat"];
cDetail.longitude=[dic objectForKey:@"long"];
cDetail.subCatId=[dic objectForKey:@"subcatid"];
cDetail.desc=[dic objectForKey:@"desc"];
// cDetail.event_inst_date=[NSData da]
cDetail.type=[dic objectForKey:@"type"];
cDetail.orderNo=[NSNumber numberWithInteger:[[dic objectForKey:@"order_no"]integerValue]];
}
cDetail.category=category1;
[category1 addCategoryDetailObject:cDetail];
}
NSError *error;
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
}
#pragma mark - Getter Setter OverRide
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"CategoryDetail" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
//NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"details.closeDate" ascending:NO];
if (self.parentCategory!=nil)
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"parent == %@", self.parentCategory];
[fetchRequest setPredicate:predicate];
}
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"orderNo" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext sectionNameKeyPath:nil
cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
如果我正确理解了您的代码,那么从CategoryDetail到Category的关系称为Category,而不是parent。因此谓词
[NSPredicate predicateWithFormat:@"parent == %@", self.parentCategory];
应该是
[NSPredicate predicateWithFormat:@"category == %@", self.parentCategory];
如果我正确理解了您的代码,那么从CategoryDetail到Category的关系称为Category,而不是parent。因此谓词
[NSPredicate predicateWithFormat:@"parent == %@", self.parentCategory];
应该是
[NSPredicate predicateWithFormat:@"category == %@", self.parentCategory];
当我尝试使用NSFetchResultController获取父实体的子实体时,由于未捕获异常“NSInvalidArgumentException”,它会给出以下错误消息终止应用程序,原因:“在实体NSSQLEntity CategoryDetail id=2中找不到keypath父对象”当我尝试使用NSFetchResultController获取父实体的子对象时,它给出了以下错误错误消息由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:“在实体NSSQLEntity CategoryDetail id=2中找不到keypath父对象”