Перезагрузка данных CoreData до проблемы UITableView - PullRequest
0 голосов
/ 01 марта 2011

Я снова борюсь с CoreData, и мне нужна ваша помощь: P

Я пишу программу для чтения RSS.Дизайн основан на примере Apple TopSongs с использованием библиотеки libxml2.

Когда мое приложение работает, я проверяю, когда было последнее обновление.Если это было более 1 часа назад, я удаляю текущее хранилище и сохраняю все заново.

if ([[NSFileManager defaultManager] fileExistsAtPath:self.persistentStorePath]) {
        NSError *error = nil;
        BOOL oldStoreRemovalSuccess = [[NSFileManager defaultManager] removeItemAtPath:self.persistentStorePath error:&error];
        NSAssert3(oldStoreRemovalSuccess, @"Unhandled error adding persistent store in %s at line %d: %@", __FUNCTION__, __LINE__, [error localizedDescription]);
    }

Я вижу, что локальный файл sql удален.

Теперь я создаю некоторыеОперации по загрузке информации из каналов в фоновом режиме.

Пока все отлично работает.

Как и в каждом RSS-канале, есть кнопка обновления, которая предполагает проверять изменения и обновлять coreData.Для начала я решил, что я буду удалять все и перезагружать все (не знаю, насколько это эффективно, но в RSS-канале нет guid, и мне нужно реализовать хэш-функцию для определения, есть ли какие-либо изменения).

Поэтому я в основном вызываю тот же код, что и выше, чтобы удалить хранилище. Повторная загрузка всех RSS-каналов снова (та же логика при первой загрузке приложения)

Я перезагружаю таблицы, но явсе еще можно увидеть те же данные в tableView, все осталось нетронутым.

Я решил пойти еще дальше и удалить магазин без загрузки контента.

if ([[NSFileManager defaultManager] fileExistsAtPath:app.persistentStorePath]) {
    NSError *error = nil;
    BOOL oldStoreRemovalSuccess = [[NSFileManager defaultManager] removeItemAtPath:app.persistentStorePath error:&error];
    NSAssert3(oldStoreRemovalSuccess, @"Unhandled error adding persistent store in %s at line %d: %@", __FUNCTION__, __LINE__, [error localizedDescription]);
}

    [self.managedObjectContext save:&err];
    [self.fetchedResultsController performFetch:&error];
    [self.tableView reloadData]

Я ожидал увидеть пустойтаблицы, но данные все еще были там.

Как это возможно?я удалил хранилище, заново загрузил и перезагрузил данные.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Я думаю, что ваша проблема может быть с линией

[self.managedObjectContext save: & err];

Скорее следуйте предложению @ Ладислава:

    NSFetchRequest * allObjectsRequest = [[NSFetchRequest alloc] init];
    [allObjectsRequest setEntity:[NSEntityDescription entityForName:@"Object" inManagedObjectContext:context]];
    [allObjectsRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID

    NSError * error = nil;
    NSArray * objects = [context executeFetchRequest:allObjectsRequest error:&error];
    [allObjectsRequest release];
    //error handling goes here
    for (NSManagedObject * object in objects) {
        [context deleteObject:object];
    }
    [context save:&error];
1 голос
/ 01 марта 2011

Эй, не удаляйте всю базу данных Core Data ... удаляйте каждую запись в базе данных Core Data, а не всю саму базу. Вы можете удалить объект из базы данных Core Data:

[context deleteObject:aCoreDataObject];

О, еще одна вещь ... если вы измените базу данных Core Data, это не будет отражено в табличном представлении. Если вы хотите увидеть изменения, вам нужно позвонить, например, [tableView reloadData];

...