iphone - 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:在实体NSSQLEntity CategoryDe​​tail id = 2中找不到“键路径父级”

标签 iphone ios objective-c core-data

我在两个实体之间有一对多的关系,当用户选择父实体时,我正在使用NSFetchedResultsController显示子类别。我的提取代码如下。
通过看到错误,似乎问题在于输入数据时。所以我也附上了虚拟插入代码。

当我尝试使用NSFetchResultController成为父实体的子代时,它给出以下错误

错误信息msg
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“在实体NSSQLEntity CategoryDe​​tail 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;

}

最佳答案

如果我正确理解您的代码,则从CategoryDe​​tail到Category的关系称为category而不是parent。因此谓词

[NSPredicate predicateWithFormat:@"parent == %@", self.parentCategory];

应该
[NSPredicate predicateWithFormat:@"category == %@", self.parentCategory];

关于iphone - 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:在实体NSSQLEntity CategoryDe​​tail id = 2中找不到“键路径父级”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15174933/

相关文章:

iphone - 切换标签栏时检测选定的标签栏

iphone - Storyboard 中的 Root View Controller

ios - 在 UICollectionViewReusableView header 中访问 UIViews 的委托(delegate)方法

ios - 定义没有基类的 Objective-C 类 - 编译器警告

iphone - 如何将重复背景图像设置为表格单元格

ios - ScrollView 内部 TableView 的问题

ios - 此编码器要求从 initWithCoder : 返回替换的对象

ios - 存折 "application/vnd.apple.pkpass"mime 类型无法识别

ios - RestKit RKObjectMapping 一个列表

ios - 静态库使用的框架如何在iOS上自动导入?