2012-01-22 2 views
3

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

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

ответ

14

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

0

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

Я просто изменить от

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

в

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

и вина был исчез

+0

Это не было ошибкой. Теперь вы просто «заставляете» программу загружать свои данные из основных данных. Обязательно удалите этот код из вашей продукции. Ошибки - отличная функция основных данных для повышения производительности. Взгляните на документацию: [Руководство по программированию основных данных - Ошибка и Uniquing] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFaultingUniquing.html) –