核心数据混淆:没有tableview获取

时间:2010-06-03 17:26:00

标签: iphone objective-c core-data

我已经使用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一起使用的控制器的参考或教程。

1 个答案:

答案 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]);
}