Coredata错误“data:<fault>”
我尝试使用以下代码从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个匹配的对象,它find了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; }
有没有办法来debugging呢?
这是预期的行为,核心数据将不会返回完整的对象,直到您需要访问对象的持久值。 直到这一点,你返回的每个对象都将是一个“错误”。
您可以使用[request setReturnsObjectsAsFaults:NO]
强制获取请求返回完整的对象,但是在大多数情况下,您所拥有的都可以。 查看NSFetchRequest的文档以获取更多信息。
如果您访问其中一个属性,核心数据将转到持久性存储并获取其余的值,那么您将在日志中获得完整的描述。
这似乎是一个常见的误解,我决定在这里写下来。
从CoreData提取数据时遇到同样的问题! 所以,我遵循@jrturton指示的方式,并在Swift 3中实现了它。
第1步:添加
import CoreData
第2步:添加下面的代码。 。
let context = ( UIApplication.shared.delegate as! AppDelegate ).persistentContainer.viewContext var request = NSFetchRequest<NSFetchRequestResult>() request = Your_Entity_Name.fetchRequest() request.returnsObjectsAsFaults = false let arrayOfData = try context.fetch(request)
希望,它会帮助你。 🙂
- 如何在Xcode for iPhone中创buildCore Data模型后创build类
- 如何从特定的对象ID获取核心数据对象?
- NSFetchedResultsController与UILocalizedIndexedCollation
- '+ entityForName:nil不是合法的NSManagedObjectContext参数 – 核心数据
- JSON和核心数据在iPhone上
- 核心数据VS Sqlite或FMDB …?
- 如何sorting包含NSManagedObject子类的实例的swift数组(按date)
- 如何在Xcode中删除旧的/未使用的数据模型版本
- 如何创build一个核心数据谓词来testing一个关系包含所有给定的对象?