Coredata fetchedObjects count throws exc_bad_access - PullRequest
0 голосов
/ 12 марта 2012

Сначала позвольте мне объяснить поток моего приложения,

Когда я запускаю приложение, я проверяю, вошел ли пользователь в систему, я делаю эту проверку в -(void) viewWillAppear:(BOOL)animated, если нет, я показываю контроллер входа в систему.Теперь это работает отлично.

В моем loadView я получаю доступ к моему стеку данных кода и пытаюсь заставить fetchedObjects отображаться в виде таблицы, щелкая одну из ячеек, я показываю больше информации об объекте ячейки, по которой щелкнули.

Вот как я это делаю.

AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [app managedObjectContext];
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sites" inManagedObjectContext:context];
NSError *error;

[fetchRequest setEntity:entity];

fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

Теперь, когда представление загружается в первый раз, я получаю следующее в отладчике

(lldb) po fetchedObjects
(NSArray *) $1 = 0x00352860 <_PFArray 0x352860>(
<NSManagedObject: 0x352550> (entity: Sites; id: 0x34c9b0 <x-coredata://7CD0A735-BC41-4E7A-8B07-C957E6096320/Sites/p1> ; data: <fault>)
)

Что выглядит нормально.

Теперь вызывается viewWillAppear, отображается представление входа в систему, и пользователь входит в систему, и представление входа в систему извлекается из стека навигации, затем снова вызывается cellforrowatindexpath таблицы, когда я ломаюсь туда, и я поfetchedObjects снова я получаю

(lldb) po fetchedObjects
(NSArray *) $3 = 0x00352860 [no Objective-C description available]

Это я не понимаю, почему данные не сохраняются?

Исключение выдается в

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [fetchedObjects count];
}

fetchedObjects isчлен класса, у меня еще нет релиза, и я никогда не изменяю его значение?

1 Ответ

1 голос
/ 12 марта 2012
fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

Возвращает автоматически освобожденный объект.Если вы хотите, чтобы он зависал, вы должны сохранить его или назначить его через retain средство доступа к свойству ed, если оно существует (это предпочтительный метод):

self.fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
...