2010-06-03 28 views
0

我已经完成并使用tableview来复制核心数据教程来显示内容。但是,我想通过在视图上执行访问实体而不使用tableview。我使用了以下提取代码,但返回的计数始终为0.数据在使用SQLite工具打开时存在。核心数据混淆:获取不带tableview

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

据我所知,一切都很好(除了我有点担心使用'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]); 
} 
+0

我已经试过你的建议。打印出来的错误是执行代码的类的名称。在没有排序描述符的情况下执行相同的操作时,出现“错误地址”错误。结果,无论我尝试返回“count:0”。我想知道在这种情况下是否需要额外的方法来实现coredata。请注意,我只是在阅读,而不是尝试添加/删除/更新。 – 2010-06-03 17:50:50

+0

我试过你的代码,结果是一样的(结果:0)。这是我需要访问“报价”实体还是他们缺少的东西? – 2010-06-03 17:54:50

+0

最后修复它。模拟器创建另一个文件夹,一个额外的SQLite数据库。切换DB修复它。代码毕竟是正确的。谢谢您的帮助。 – 2010-06-03 18:33:07