¿Los datos principales no pueden resolver fallas cuando el objeto tiene el atributo "descripción"?

Código:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"A"
                                          inManagedObjectContext:moc];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"somePredicate", someObject];
[fetchRequest setPredicate:predicate];

frc = [[NSFetchedResultsController alloc]
       initWithFetchRequest:fetchRequest
       managedObjectContext:moc
       sectionNameKeyPath:@"recency"
       cacheName:@"frc"];
[fetchRequest release];

frc.delegate = self;

NSError *error;
BOOL success = [frc performFetch:&error];
if (!success) {
    NSLog(@"error: %@", error);
}

for (A *a in [frc fetchedObjects]) {        
    [someMutableArray addObject:a.b];
    [someMutableArray addObject:a];
}

Modelo de datos:

A y B son entidades. A tiene una relación obligatoria de uno a B. B tiene una relación inversa opcional de muchos a A.

Arriba en inglés:

Inicialice un NSFetchedResultsController para obtener algunos datos para alimentar una vista de tabla. Después de la búsqueda inicial, deje a un lado los datos para un procesamiento.

Ahora, más tarde, trato de hacer esto:

id object = [someMutableArray objectAtIndex:someIndex];
NSLog(@"%@", object);

if ([object isMemberOfClass:[B class]]) {
    someVar = object.propertyFromB; // problem
} else if ([object isMemberOfClass:[A class]]) {
    someVar = object.propertyFromA;
}

Pregunta / problema: la línea indicada con "problema" se bloquea. (EDITAR: vea más abajo para la resolución, pero aún así me gustaría una explicación).

La llamada NSLog anterior produce:

2010-01-30 14:47:14.433 app[22618:20b] <B: 0xf7f750> (entity: B; id: 0xf7ba70 <x-coredata://B01FEC86-14D6-4973-BFDB-EDE4AFD24FDC/B/p4> ; data: <fault>)
2010-01-30 14:47:14.438 app[22618:20b] <A: 0xf7e360> (entity: A; id: 0xf35820 <x-coredata://B01FEC86-14D6-4973-BFDB-EDE4AFD24FDC/A/p6> ; data: {
    prop1 = value1;
    prop2 = value2;
    ... etc ...
})

Es decir, por la línea problemática, si el objeto era de tipo A, se ha fallado y está disponible en la memoria, pero si es B, es un error.

Entiendo que la línea del "problema" debería activar la falla y obtener los datos del almacén, pero esto no está sucediendo. Me gustaría entender / depurar por qué. He intentado insertar llamadas willAccessKey / didAccessKey alrededor de esto. También intenté establecer setRelationshipKeyPathsForPrefetching: "b" en la solicitud de búsqueda. Ninguno funcionó.

Mi hipótesis es que como estoy abusando de los resultados de NSFetchedRequestController, el motor de fallas se confunde en el camino y no recupera la falla cuando se supone que debe hacerlo. Así que supongo que una forma de fuerza bruta sería crear una nueva solicitud de recuperación manual para recuperar el objeto B relacionado en el momento adecuado. Pero hay una manera mejor?

EDITAR:

El problema era que el objeto B tenía una "descripción" de propiedad que yo había definido, pero que colisiona con el nombre incorporado de NSObject. Xcode siempre me dio advertencias, pero las ignoré porque pensé que la propiedad / método interno de "descripción" solo se usa para volcar cadenas a la consola y similares, no al procesamiento interno.

El problema desapareció después de que hice una nueva versión de mi modelo, renombrando "descripción" a otra cosa. Todas las fallas comenzaron a funcionar como se esperaba.

Sin embargo, no entiendo lo que está sucediendo. ¿Utiliza Core Data el método de "descripción" de los objetos para alguna introspección interna?

Respuestas a la pregunta(3)

Su respuesta a la pregunta