2016-05-10 75 views
0

我有一個使用Realm.io的應用程序,在註銷時,我們完全摧毀了由用戶構建的領域緩存,這樣當新用戶登錄時,我們可以重新創建下一個用戶的緩存文件。如何徹底摧毀並重新創建Realm數據庫

刪除所有對象不是一個選項,因爲領域文件使用用戶密碼的散列進行加密,所以它必須是新鮮的領域(AFAIK)。

目前我刪除境界文件像這樣:

NSString *realmFile = [[DCMCacheManager documentsDirectoryPath] stringByAppendingPathComponent:@"myApp.realm"]; 
NSFileManager *localFileManager = [NSFileManager new]; 

[localFileManager removeItemAtPath:realmFile error:&error]; 

而且使用復原它:

RLMRealm * realm = [RLMRealm realmWithConfiguration:config error:&error]; 

當創建代碼首次境界文件沒有問題,創建運行。當我在刪除後嘗試重新創建它時,該應用似乎會返回域內文件的內部緩存版本,因此不會爲我創建myApp.realm文件。

當我刪除它時如何確保領域絕對死亡的任何建議?

+0

[清除完整的Realm數據庫]的可能的副本(http://stackoverflow.com/questions/26067193/clear-complete-realm-database) – Patrick

+0

將該網站從軌道上刪除。這是確保的唯一方法。 –

回答

1

在刪除Realm文件之前,您需要確保所有使用該文件的Realm對象都已被釋放。在可能的情況下,最簡單的方法是在完全打開Realm文件之前簡單地進行刪除操作,或者只需要打開Realm文件,就可以在明確的autoreleasepool之內打開。

如果用戶可以在應用程序運行時註銷並登錄到其他帳戶,那麼這不是一個選項。相反,我推薦的是爲每個用戶使用不同的文件路徑(即像NSString *realmFile = [[DCMCacheManager documentsDirectoryPath] stringByAppendingPathComponent:userName];而不是@「myapp.realm」)。這將完全避開這個問題,並且可以更快地在用戶之間來回切換。如果您的Realm文件佔用大量空間,則可以在應用程序啓動時清除除當前活動用戶以外的所有文件。

另一方面,如果你的Realm文件純粹只是一個緩存,那麼Apple希望你把文件放到Caches目錄中而不是Documents目錄中,他們偶爾會拒絕不這樣做的應用程序。