Я получил ошибку, когда я получил свои данные из NSManagedObjectContext - PullRequest
3 голосов
/ 22 января 2012

Я запускаю свое приложение и затем извлекаю свои данные. Данные в порядке. Когда я бегу во второй раз, я ошибся в своих старых ценностях. Что случилось?

- (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})"
) 

Ответы [ 2 ]

14 голосов
/ 23 января 2012

<fault> не означает, что ваши данные повреждены.Это означает, что он динамически связан с извлеченными результатами, и фактический объект будет загружен, когда будет предпринята любая попытка получить доступ к какому-либо значению / свойству объекта.помните - вы использовали @dynamic в .m файле?Вот почему он показывает <fault>, когда вы NSLog с массивом, а ошибка исчезает при доступе к любому свойству объекта NSLog(@"Test: %@ ", test.text);

0 голосов
/ 23 января 2012

Я исправил ошибку.

Я только что изменился с

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

до

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

и ошибка исчезла

...