0
- (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!"); 
    } 
} 

的entityDescription和设置在viewDidLoad方法,因为它是如下图所示的背景:核心数据崩溃:的keyPath项目实体未发现

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
self.managedObjectContext = appDelegate.managedObjectContext; 
self.entityDescription = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:self.managedObjectContext]; 

崩溃信息: *终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因是:


可能有人送“的keyPath项目实体没有发现”手?;)

回答

5

的关键在于排序描述符

[NSSortDescriptor sortDescriptorWithKey:@"Project" ascending:YES]; 

使用必须是你的核心数据实体的属性,而不是实体的名称本身。 因此,您应该使用 项目实体的某些属性(如@"name")替换排序描述符中的@"Project"

+0

非常感谢你的回答;)你做出正确的猜测! – JackieLam 2013-05-02 10:35:19

0

设置缓存的名字,如:

self.fetchResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"temp"]; 
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); 
}