CoreData: загрузка в наборе исходных данных от XML

У меня есть включенное приложение навигации 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. Если кто-либо хотел бы список того, что я делаю, я обеспечу, но это является довольно подробным. Код, как реализовано взят прямо из двух учебных руководств по яблоку. Последняя детализация, как загрузиться в данных без неуместного, выбирает/выбирает на базе данных, однако сказал, что в учебном руководстве ничто не говорится о том, где это должно находиться.

1
задан TechZen 24 July 2010 в 12:57
поделиться

2 ответа

Когда вы видите EXC_BAD_ACCESS, вы слишком высвободили объект. Вот несколько советов по устранению неполадок .

0
ответ дан 2 September 2019 в 22:47
поделиться

Думаю, вы зациклились на том, где именно находится код.

Objective-C, Core Data и общий API Apple очень инкапсулированы и имеют модульную структуру. Вы можете подключить необходимую функциональность практически в любом месте и активировать ее или нет практически в любое время. Единственные критические места / время - это методы делегирования приложения, связанные с запуском и остановкой приложения. Все остальное гибкое. В вашем случае вам нужно только загрузить данные перед их использованием, и вам нужно только объединить данные после того, как они были изменены. Возможные конфигурации когда и где функционально бесконечны. Разные приложения делают все это в разное время и в разных местах.

Вы должны искать более прозаическую причину EXC_BAD_ACCESS. В нормальных условиях отладчик покажет вам строку, где происходит сбой. Если ничего не показывает, то, скорее всего, разбился сам отладчик. Скорее всего, вы просто пропустили отображение сбойной строки, потому что строка в вашем коде, которая ее запустила, прокручивается за пределы экрана трассировки стека. (Многие новички совершают эту ошибку.)

2
ответ дан 2 September 2019 в 22:47
поделиться