我将数据存储在iOS
中并尝试检索它。为此,我使用以下功能:
NSManagedObjectContext *managedObjectContext = [DatabaseOperation managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:CODE_SEARCH_ENTITY];
NSMutableArray *datasAA = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
NSMutableArray *retrievedData = datasAA;
NSLog(@"Dictionary Data: %@",retrievedData);
我第一次得到低于回应:
"<NSManagedObject: 0x7d668660> (entity: xyx; id: 0x7d668570 <x-coredata://48CFFB0A-DF7C-468B-A134-87BACFEA95CC/CodeSearchTable/p52> ; data: {\n codeFoils = 12;\n codeHospitalPrice = 6786;\n codeId = 88;\n codeMaxRetail = 9240;\n codeNeedleDesc = \"1/2 Circle Round Body Blunt\";\n codeNeedleDimen = \"44 MM\";\n codeNid = NW9367;\n codeSize = 1;\n sutureTypeLength = \"PDS II Monofilament (Voilet) 150 CM Loop\";\n})",
"<NSManagedObject: 0x7d668770> (entity: xyx; id: 0x7d6684b0 <x-coredata://48CFFB0A-DF7C-468B-A134-87BACFEA95CC/CodeSearchTable/p53> ; data: {\n codeFoils = 12;\n codeHospitalPrice = 5149;\n codeId = 88;\n codeMaxRetail = 6960;\n codeNeedleDesc = \"1/2 Circle Round Body (Heavy)\";\n codeNeedleDimen = \"40 MM\";\n codeNid = NW9371;\n codeSize = \"1/0\";\n sutureTypeLength = \"PDS II Monofilament (Voilet) 90 CM\";\n})",
但是下次我运行时会给我以下结果:
"<NSManagedObject: 0x78616510> (entity: xyz; id: 0x78760110 <x-coredata://B8C411F0-5C73-413B-8709-B7F805B6E413/CodeSearchTable/p611> ; data: <fault>)",
"<NSManagedObject: 0x78616550> (entity: xyz; id: 0x78760120 <x-coredata://B8C411F0-5C73-413B-8709-B7F805B6E413/CodeSearchTable/p612> ; data: <fault>)",
请解释一下我在这里做错了什么。提前致谢。
答案 0 :(得分:2)
某些Core Data对象不一定存在问题&#34; fault&#34;状态。
看看这个document,它解释了这一切。
简而言之:
错误是一种提高性能(内存使用)的机制;
机制应该透明地工作:
对象可能出现故障(由SDK)以减少内存使用,然后
在需要时重新获取,例如,在访问属性时。
有例外(导致不良行为):
对象因删除而出现故障;在这种情况下,尝试并访问它会使您的应用程序崩溃;你应该检查反向关系并考虑 nullify 或级联删除规则;
您的实施文件(在Obj-C中)不会将该属性声明为@dynamic
,而是使用@synthesize
。
您的情况可能会发生以下情况:
如果是这种情况,那么错误就没有错。
请尝试在方法结束时添加以下语句,以检查在出错之后是否可以将对象带回内存:
NSLog(@"Object: %@", [retrievedData firstObject]);
NSLog(@"Object attribute: %@", [[retrievedData firstObject] valueForKey:@"codeFoils"]);