【问题标题】:I got fault when I fetched my data from NSManagedObjectContext从 NSManagedObjectContext 获取数据时出错
【发布时间】:2012-01-22 19:13:38
【问题描述】:

我运行我的应用程序,然后获取我的数据。数据没问题。当我第二次跑步时,我的旧价值观出错了。怎么了?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 NSEntityDescription *entity = [NSEntityDescription entityForName:@"Test" inManagedObjectContext:[self managedObjectContext]]; 
    for (int i =0; i<2; i++) 
    {
        Test *test = [[[Test alloc] initWithEntity:entity insertIntoManagedObjectContext:[self managedObjectContext]] autorelease];
        test.text = @"Text";
        test.index = [NSNumber numberWithInt:i];
    }
    [self saveContext];
}


-(void) showValues
{    
 NSEntityDescription *entity = [NSEntityDescription entityForName:@"Test" inManagedObjectContext:[self managedObjectContext]];
 NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
 [request setEntity:entity];    
 NSError *error;    
 NSArray *array = [[self managedObjectContext] executeFetchRequest:request error:&error];
 NSLog(@"Array: %@ ", array);    
}

第一次运行

2012-01-22 21:48:52.092 Mew[411:707] Array: (
"<Test: 0x183f60> (entity: Test; id: 0x1856b0 <x-coredata://90165BCF-D2DE-4661-9B12-33EF86F0C09F/Test/p1> ; data: {\n    index = 0;\n    text = Text;\n})",
"<Test: 0x184940> (entity: Test; id: 0x1857e0 <x-coredata://90165BCF-D2DE-4661-9B12-33EF86F0C09F/Test/p2> ; data: {\n    index = 1;\n    text = Text;\n})"
) 

第二次运行 // 第一个和第二个值是错误的

2012-01-22 21:50:29.892 Mew[429:707] Array: (
"<Test: 0x16c950> (entity: Test; id: 0x16c720 <x-coredata://90165BCF-D2DE-4661-9B12-33EF86F0C09F/Test/p1> ; data: <fault>)",
"<Test: 0x16d130> (entity: Test; id: 0x16c730 <x-coredata://90165BCF-D2DE-4661-9B12-33EF86F0C09F/Test/p2> ; data: <fault>)",
"<Test: 0x1684c0> (entity: Test; id: 0x16bfd0 <x-coredata://90165BCF-D2DE-4661-9B12-33EF86F0C09F/Test/p3> ; data: {\n    index = 0;\n    text = Text;\n})",
"<Test: 0x16ab90> (entity: Test; id: 0x16c100 <x-coredata://90165BCF-D2DE-4661-9B12-33EF86F0C09F/Test/p4> ; data: {\n    index = 1;\n    text = Text;\n})"
) 

【问题讨论】:

    标签: ios core-data nsmanagedobjectcontext nsfetchrequest


    【解决方案1】:

    &lt;fault&gt; 并不意味着您的数据已损坏。这意味着它与获取的结果动态链接,并且当尝试从对象访问任何值/属性时,将加载实际对象。记住 - 你在 .m 文件中使用过@dynamic 吗? 这就是为什么当您使用数组NSLog 时它显示&lt;fault&gt; 并且当您访问对象NSLog(@"Test: %@ ", test.text); 的任何属性时故障消失了

    【讨论】:

      【解决方案2】:

      我修复了一个错误。

      我刚刚换了

       NSLog(@"Array: %@ ", array);
      

      for (Test *test in array)
      {
          NSLog(@"Test: %@ ", test.text);
      }
      

      故障消失了

      【讨论】:

      • 这不是错误。现在您只需“强制”程序从核心数据中加载您的数据。确保从您构建的产品中删除该代码。故障是核心数据提高性能的一个重要特征。查看文档:Core Data Programming Guide - Faulting and Uniquing
      猜你喜欢
      • 2018-12-20
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2021-08-17
      相关资源
      最近更新 更多