Menghentikan aplikasi karena pengecualian 'NSInvalidArgumentException' yang tidak tertangkap, alasan: 'induk jalur kunci tidak ditemukan di entitas NSSQLEntity CategoryDetail id=2

Saya memiliki hubungan satu ke banyak antara dua Entitas, dan ketika pengguna memilih entitas induk maka saya menampilkan subkategori menggunakan NSFetchedResultsController. dan kode pengambilan saya diberikan di bawah ini. Dengan melihat kesalahan tersebut sepertinya masalahnya adalah saat memasukkan data. Jadi saya telah melampirkan kode penyisipan tiruan juga.

Saat saya mencoba membuat anak dari entitas induk menggunakan NSFetchResultController maka muncul kesalahan di bawah ini

Pesan kesalahan Menghentikan aplikasi karena pengecualian 'NSInvalidArgumentException' yang tidak tertangkap, alasan: 'induk jalur kunci tidak ditemukan di entitas 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;

}

person Iqbal Khan    schedule 02.03.2013    source sumber
comment
Ketika saya mencoba untuk mendapatkan anak dari entitas induk menggunakan NSFetchResultController maka ia memberikan kesalahan di bawah ini   -  person Iqbal Khan    schedule 02.03.2013
comment
Pesan kesalahan Mengakhiri aplikasi karena pengecualian 'NSInvalidArgumentException' yang tidak tertangkap, alasan: 'induk jalur kunci tidak ditemukan di entitas NSSQLEntity CategoryDetail id=2'   -  person Iqbal Khan    schedule 02.03.2013


Jawaban (1)


Jika saya memahami kode Anda dengan benar, hubungan dari CategoryDetail ke Category disebut category dan bukan parent. Oleh karena itu predikatnya

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

seharusnya

[NSPredicate predicateWithFormat:@"category == %@", self.parentCategory];
person Martin R    schedule 02.03.2013