У меня есть включенное приложение навигации iPhone/iPad плоскости XCode CoreData. В этом у меня есть modifed данные, которые он первоначально определяет для представления некоторых категорий в табличном представлении со связанными изображениями. Например, путем изменения События к Категории в другом месте, изменения .xcdatamodel файла и изменения этого вызова в RootController.m:
- (void)configureCell:(DeliciousCategoryCell *)cell atIndexPath:(NSIndexPath *)indexPath {
NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.categoryLabel.text = [[managedObject valueForKey:@"name"] description];
NSString *filePath = [[NSBundle mainBundle] pathForResource:cell.categoryLabel.text ofType:@"tiff"];
cell.categoryImage.image = [[UIImage alloc] initWithContentsOfFile:filePath];
}
Если я предварительно загружаю данные из XML-файла, вставляя код:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Данные загружаются в штрафе, но приложение подпоследовательно отказывает с EXC_BAD_ACCESS. Если я беру тот код загрузки приложения, мои данные присутствуют и мой дисплей категорий, прекрасный со связанными локальными изображениями. Я попытался переместить рассматриваемый код в другое место, такой как:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
и проверка для проверки данные пусты однако, это все еще отказывает, все же загружает данные. Я, может казаться, не разыскиваю причину EXC_BAD_ACCESS через отладчик, поскольку отслеживание стека лишено полезной информации. То, что я хотел бы знать, является ответом на следующее, поскольку я не могу найти его в документации яблок:
1) Когда такое Базовое основанное на данных приложение сначала запускается, где должен, вызовы для загрузки в наборе исходных данных идут? Я идеально сделал бы это через сеть, но в настоящее время просто открываю локальный XML-файл для тестирования.
2) После того как базовые данные были загружены, я хотел бы позволить пользователю обновить базовую информацию о данных путем слияния. Где такой код должен находиться?
У меня нет проблемы с логикой просто местоположением необходимого кода afaict. Если кто-либо хотел бы список того, что я делаю, я обеспечу, но это является довольно подробным. Код, как реализовано взят прямо из двух учебных руководств по яблоку. Последняя детализация, как загрузиться в данных без неуместного, выбирает/выбирает на базе данных, однако сказал, что в учебном руководстве ничто не говорится о том, где это должно находиться.
Когда вы видите EXC_BAD_ACCESS, вы слишком высвободили объект. Вот несколько советов по устранению неполадок .
Думаю, вы зациклились на том, где именно находится код.
Objective-C, Core Data и общий API Apple очень инкапсулированы и имеют модульную структуру. Вы можете подключить необходимую функциональность практически в любом месте и активировать ее или нет практически в любое время. Единственные критические места / время - это методы делегирования приложения, связанные с запуском и остановкой приложения. Все остальное гибкое. В вашем случае вам нужно только загрузить данные перед их использованием, и вам нужно только объединить данные после того, как они были изменены. Возможные конфигурации когда и где функционально бесконечны. Разные приложения делают все это в разное время и в разных местах.
Вы должны искать более прозаическую причину EXC_BAD_ACCESS. В нормальных условиях отладчик покажет вам строку, где происходит сбой. Если ничего не показывает, то, скорее всего, разбился сам отладчик. Скорее всего, вы просто пропустили отображение сбойной строки, потому что строка в вашем коде, которая ее запустила, прокручивается за пределы экрана трассировки стека. (Многие новички совершают эту ошибку.)