У меня есть метод, который выполняет NSFetchRequest для получения массива управляемых объектов (в частности, XMPPUserCoreDataStorageObjects). Объекты правильно выдают ошибку, прежде чем массив будет возвращен executeUserFetch, и я смогу напечатать все displayNames, но как только я верну массив в printUserInfo, объекты перейдут в состояние ошибки, что не будет проблемой, за исключением того, что Core Data не принесет их обратно!
- (NSArray*)performUserFetch
{
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:[xmppRosterStorage persistentStoreCoordinator]];
[context setUndoManager:nil];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"XMPPUserCoreDataStorageObject" inManagedObjectContext:context];
NSSortDescriptor *sd1 = [[NSSortDescriptor alloc] initWithKey:@"sectionNum" ascending:YES];
NSSortDescriptor *sd2 = [[NSSortDescriptor alloc] initWithKey:@"displayName" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sd1, sd2, nil];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
[fetchRequest setSortDescriptors:sortDescriptors];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSError *err;
NSArray *result = [context executeFetchRequest:fetchRequest error:&err];
return result;
}
- (void)printUserInfo
{
NSArray *result = [self performUserFetch];
for(XMPPUserCoreDataStorageObject *user in result)
{
NSString *dn = user.displayName;
NSLog(@"Display name = %@", dn);
}
NSLog(@"%@",result);
}
Я вызываю printUserInfo каждые 5 секунд, и массив результатов, если все нормально, в executeUserFetch, но все в порядке в printUserInfo, и все элементы в массиве были удалены из памяти. Это было бы хорошо, но когда я вызываю user.displayName, ошибка не устраняется, поэтому dn имеет значение null, а описание пользователя -
"<XMPPUserCoreDataStorageObject: 0x10219fd60> (entity: XMPPUserCoreDataStorageObject; id: 0x1021a3390 <x-coredata://324B9E93-BAD1-42B4-B7DB-2A62CA69BA13/XMPPUserCoreDataStorageObject/p127> ; data: <fault>)"
Кто-нибудь может помочь?!
(информация: 10.7 SDK, printUserInfo вызывается каждые 5 секунд и работает в режиме ARC)