我已经使用tableview完成并复制了Core Data教程以显示内容。但是,我想通过在没有tableview的视图上获取来访问实体。我使用了以下获取代码,但返回的计数始终为0.使用SQLite工具打开数据库时存在数据。
NSManagedObject *entryObj;
XYZDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Quote" inManagedObjectContext:managedObjectContext];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[request setEntity: entity];
NSArray *results = [managedObjectContext executeFetchRequest:request error:nil];
if (results == nil) {
NSLog(@"No results found");
entryObj = nil;
}else {
NSLog(@"results %d", [results count]);
}
[request release];
[sortDescriptors release];
返回的计数始终为0;它应该是5.
任何人都可以向我指出有关创建不与tableview一起使用的控制器的参考或教程。
答案 0 :(得分:1)
据我所知,一切看起来都很好(除了我有点担心使用'id'作为属性名称,因为它是Objective-C中的关键字)。尝试删除排序描述符,看看是否有任何改变。另外,添加错误检查。也许正在发生的事情可以告诉你。我假设“Quote”是该实体的正确名称。如果这些都没有帮助,我认为问题不在于获取请求。
对于它的价值,这是我如何写它:
XYZDelegate * appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext * context = appDelegate.managedObjectContext;
NSFetchRequest * request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Quote" inManagedObjectContext:context];
NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[sortDescriptor release];
[request setEntity:[NSEntityDescription entityForName:@"Quote" inManagedObjectContext:context]];
NSError * error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
[request release];
if (error) {
NSLog(@"ERROR: %@ %@", [error localizedDescription], [error userInfo]);
}
if (results == nil) {
NSLog(@"No results found");
entryObj = nil;
}
else {
NSLog(@"results %d", [results count]);
}