正确刷新Core Data数据库的方法

时间:2011-02-05 22:16:23

标签: ipad core-data

我的应用已设置好,以便在首次使用时,它会从基于网络的xml Feed中下载所需的数据。

用户还可以选择通过设置定期刷新数据。

当他们这样做时,我想删除现有的数据库,然后通过我用于第一次加载的代码重新创建它。

我读到只是删除数据库不是正确的方法,因此我在加载新数据集之前使用以下内容来销毁数据。

- (void)resetApplicationModel {

NSURL *_storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: DBSTORE]];
NSPersistentStore *_store = [persistentStoreCoordinator persistentStoreForURL:_storeURL];
[persistentStoreCoordinator removePersistentStore:_store error:nil];
[[NSFileManager defaultManager] removeItemAtPath:_storeURL.path error:nil];

[persistentStoreCoordinator release], persistentStoreCoordinator = nil;
}

但是这不起作用,在执行数据刷新时,它会下载数据但无法将其保存到数据库并在控制台中生成以下错误;

此NSPersistentStoreCoordinator没有持久存储。它无法执行保存操作。

刷新数据库的“正确”方法是什么?

1 个答案:

答案 0 :(得分:1)

执行此操作的“正确”方法是仅获取所有对象,删除每个对象,然后保存上下文。 (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html)

- (void) deleteAllEntitiesForName:(NSString*)entityName {
    NSManagedObjectContext *moc = [self managedObjectContext];
    NSEntityDescription *entityDescription = [NSEntityDescription
        entityForName:entityName inManagedObjectContext:moc];
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
    [request setEntity:entityDescription];
    NSError *error = nil;
    NSArray *array = [moc executeFetchRequest:request error:&error];
    if (array != nil) {
        for(NSManagedObject *managedObject in array) {
            [moc deleteObject:managedObject];
        }
        error = nil;
        [moc save:&error];
    }

}

然后你可以重新创建你的对象。