2011-02-05 130 views
2

我的應用程序已設置好,當它第一次使用時,它會從基於Web的xml源下載所需的數據。更新核心數據數據庫的正確方法

用戶還可以選擇通過設置定期刷新數據。

當他們這樣做時,我想刪除現有數據庫,然後通過我用於第一次加載的代碼重新創建它。

我讀到,簡單地刪除數據庫不是正確的方法來做到這一點,所以我使用以下在加載新數據集之前銷燬數據。

- (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

這樣做的「正確」方法是隻取出所有對象,刪除它們中的每一個,然後保存上下文。 (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]; 
    } 

} 

然後,你可以重新創建的對象。

+0

我認爲「if(array == nil)」應該是「if(array!= nil)」 – 2011-03-01 01:00:37