我尝试使用以下代码从CoreData中提取数据
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Cave" inManagedObjectContext:self.context];
request.predicate = [NSPredicate predicateWithFormat:@"(latitude > 0) AND (longitude > 0)"];
NSError *error;
NSLog(@"%@",[self.context executeFetchRequest:request error:&error]);
NSLog(@"%@",[error localizedDescription]);CoreData应该有9个匹配的对象,它会找到这9个对象。所以谓词应该可以工作,但我在控制台中得到了以下内容
2011-09-05 07:41:42.267 CaveConditions[6930:11903] (
"<NSManagedObject: 0x7368060> (entity: Cave; id: 0x7367880 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p31> ; data: <fault>)",
"<NSManagedObject: 0x73547e0> (entity: Cave; id: 0x7356e20 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p40> ; data: <fault>)",
"<NSManagedObject: 0x73681e0> (entity: Cave; id: 0x7363e60 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p42> ; data: <fault>)",
"<NSManagedObject: 0x7368280> (entity: Cave; id: 0x7356be0 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p72> ; data: <fault>)",
"<NSManagedObject: 0x7368320> (entity: Cave; id: 0x733ad80 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p73> ; data: <fault>)",
"<NSManagedObject: 0x73683c0> (entity: Cave; id: 0x7333e70 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p91> ; data: <fault>)",
"<NSManagedObject: 0x7368480> (entity: Cave; id: 0x7361810 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p101> ; data: <fault>)",
"<NSManagedObject: 0x7368570> (entity: Cave; id: 0x7360110 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p105> ; data: <fault>)",
"<NSManagedObject: 0x7368610> (entity: Cave; id: 0x73303c0 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p112> ; data: <fault>)"
)它曾经工作得很好,直到我在Cave.m中做了以下更改,它是实体
我在Cave.h中添加了MKAnnotation作为委托,并在Cave.m中添加了以下代码
- (CLLocationCoordinate2D)coordinate
{
CLLocationCoordinate2D location;
location.latitude = [self.latitude doubleValue];
location.longitude = [self.longitude doubleValue];
return location;
}有没有办法调试它?
发布于 2011-09-05 14:03:43
这是预期的行为,核心数据不会返回完整的对象,直到您需要访问对象的持久值。在此之前,您返回的每个对象都将是一个“错误”。
您可以使用[request setReturnsObjectsAsFaults:NO]强制fetch请求返回完整的对象,但在大多数情况下,您拥有的对象就可以了。有关更多信息,请查看NSFetchRequest的文档。
如果您访问其中一个属性,核心数据将进入持久化存储并获取其余的值,然后您将在日志中获得完整的描述。
这似乎是一个如此普遍的误解,以至于我决定写下它,here。
发布于 2017-04-26 18:57:10
在从CoreData中提取数据时,我也遇到了同样的问题!因此,我遵循了@jrturton的方法,并在Swift 3中实现了它
第1步:添加
import CoreData
步骤2:添加以下代码。。
让context =( UIApplication.shared.delegate as!AppDelegate ).persistentContainer.viewContext var request = NSFetchRequest() request = Your_Entity_Name.fetchRequest() request.returnsObjectsAsFaults = false do {让arrayOfData = try context.fetch(request) }捕获{ //处理错误!}
希望它能帮到你。:)
https://stackoverflow.com/questions/7304257
复制相似问题