- (void)fetchResult
{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Project" ascending:YES];
[request setEntity:self.entityDescription];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
self.fetchResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
NSError *fetchError = nil;
BOOL success = [self.fetchResultController performFetch:&fetchError];
if (success) {
NSLog(@"fetched!");
}
else {
NSLog(@"fetch fail!");
}
}
在viewDidLoad方法中设置了entityDescription和上下文,如下所示:
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
self.managedObjectContext = appDelegate.managedObjectContext;
self.entityDescription = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:self.managedObjectContext];
崩溃信息: * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'在实体中找不到keypath项目'
有人能帮忙吗?;)
答案 0 :(得分:6)
排序描述符中使用的键
[NSSortDescriptor sortDescriptorWithKey:@"Project" ascending:YES];
必须是核心数据实体的属性,而不是实体本身的名称。
所以你应该用排序描述符替换@"Project"
中的@"name"
项目实体,例如{{1}}。
答案 1 :(得分:0)
设置缓存名称,如:
self.fetchResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"temp"];
答案 2 :(得分:0)
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:predicate];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:context];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Column_Name" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *arrTemp = [context executeFetchRequest:fetchRequest error:&error];
if([arrTemp count]>0){
NSLog(@"%@",arrTemp);
}
答案 3 :(得分:0)
它与最初的问题无关,但与问题的标题高度相关。 由于这是我找到的唯一关于此主题的内容,因此对其他人可能有用:
因此,我遇到了“核心数据崩溃:'在实体中找不到关键路径视频...'”,因为我在谓词中使用了字符串插值:
let projectName = "Videos"
let predicate = NSPredicate(format: "\(#keyPath(Scene.relatedProject.name)) == \(projectName)")
正确的方法是:
let projectName = "Videos"
let predicate = NSPredicate(format: "\(#keyPath(Scene.relatedProject.name)) == %@", projectName)
希望,这将使某人节省几个小时来弄清楚发生了什么事情。