2012-10-08 45 views
2

我已經發布了CoreData應用程序,在發佈第一個版本(版本10)之前,我獲得了9個型號過時的版本。 我想刪除將我引向最終模型的一系列開發模型。手動刪除已發貨應用程序的舊xcdatamodel的可能缺點

在開發過程中,我發現這可以通過刪除myproject.xcodeproj中的引用並刪除mydata.xcdatamodeld中的version_x.xcdatamodel文件來輕鬆完成。

但是我想調查任何可能的下跌空間,尤其是考慮到我的應用程序已經在App Store。 考慮到我無法從早期版本遷移或恢復數據模型。

在相反的我只是增加了基於10版,被稱爲11版上我做發展的新模式。 我不知道遷移的機制,但爲什麼我需要在版本10之前的模型?

+0

你肯定* *所有用戶都已經升級到最新版本? – Adam

+0

這真是一個很好的觀點,我完全錯過了。但是,這不是我的情況,因爲版本10是起始版本。 – Leonardo

+0

請參見[this](http://stackoverflow.com/q/7708392/730701)和[this](http://stackoverflow.com/q/6712123/730701)。 – Adam

回答

1

的主要原因爲在第一時間讓您的數據模型的多個版本是處理遷移(升級數據庫)不僅僅是刪除現有的數據庫,並創建一個新的與變化更優雅。

所以,如果你有以前寄出您的應用程序的版本使用以前的數據模型,你想優雅地升級數據庫的能力,那麼就離開了以前的型號完好無損。

如果您創建數據模型的多個版本的唯一原因是最初的開發並沒有其他人在,讓您的數據保持原樣在那裏與以前的數據模型您的應用程序,然後刪除掉。沒關係。

自動遷移數據模型和優雅的使用下面的代碼在你的應用程序代理:

// Returns the persistent store coordinator for the application. 
// If the coordinator doesn't already exist, it is created and the application's store added to it. 
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 

    if (_persistentStoreCoordinator != nil) { 
     return _persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"database.sqlite"]; //change to the name of your database 

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

    NSError *error = nil; 
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 

     //[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]; --delete old model if necessary 
     //abort(); --Abort App if necessary 
    } 

    return _persistentStoreCoordinator; 
} 
相關問題