2016-05-23 96 views

回答

20

要從磁盤上徹底刪除Realm文件並從頭開始,只需使用NSFileManager手動刪除即可。

例如,刪除默認的境界文件:

NSFileManager.defaultManager().removeItemAtURL(Realm.Configuration.defaultConfiguration.fileURL!) 

如果您想保留境界文件,但完全空的對象,你可以調用deleteAll()這樣做:

let realm = try! Realm() 
try! realm.write { 
    realm.deleteAll() 
} 

更新:我覺得我忽略了在我最初的答案中提到這一點。如果您選擇從磁盤刪除Realm文件,則必須在應用程序中的任何線程上打開Realm文件之前完成此操作。一旦打開,Realm將內部緩存對其的引用,即使文件被刪除也不會被釋放。

如果您確實需要在刪除之前打開Realm文件以檢查其內容,則可以將其放在autoreleasepool中以執行此操作。

objc:

@try { 
    [RLMRealm defaultRealm]; 
} 
@catch(...) { 
    NSURL *rurl = [RLMRealmConfiguration defaultConfiguration].fileURL; 
    // blow the database clean 
    NSError *error = nil; 
    [[NSFileManager defaultManager] removeItemAtURL:rurl error:&error]; 
    if(error) { 
     NSLog(@"error %@ removing realm db", error); 
    } else { 
     NSLog(@"removed realm db successfully"); 
    } 
} 
+0

好的答案,蒂姆。在刪除之前,我們可以從舊數據庫複製一些記錄到新數據庫(我們希望用戶使用)嗎? –

+0

@ChanchalRaj謝謝!嗯,是的,你可以很容易地複製領域之間的值,但在這種情況下,這意味着你必須掛在舊的領域一段時間,以便將數據複製到新領域。我可能會建議將新的Realm保存到不同的位置,並且一旦完成複製數據,請刪除舊的Realm並將其替換爲新的Realm。請務必在'@ autoreleasepool'中完成所有這些操作,以便在刪除之前釋放對舊Realm的所有引用。 :) – TiM

+3

** Swift 3:**'試試? FileManager.default.removeItem(at:Realm.Configuration.defaultConfiguration.fileURL!)' –

0

你試過

let realm = try! Realm() 
    realm.deleteAllObjects() 

您也可以嘗試將其插入電腦,將Xcode中,然後設備,然後尋找當前領域存在並刪除它刪除掉設備的境界。