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;
}