2015-10-30 32 views
0

我在Swift中使用Realm Objective-C,因爲我在應用程序中支持iOS7。Realm無法解密後臺線程中的數據庫錯誤

我使用一個函數在後臺線程中寫入一段代碼到領域。我想添加加密,所以我修改了這樣的功能:

class func updateRealmWithBlockInBackground(block:() -> Void) { 
    let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT 
    dispatch_async(dispatch_get_global_queue(priority, 0)) { 
     do { 
      let config = RLMRealmConfiguration.defaultConfiguration() 
      config.encryptionKey = Utils.getKey() 
      let realm = try RLMRealm(configuration: config) 

      realm.beginWriteTransaction() 
      block() 
      realm.commitWriteTransaction() 

     } catch { 
      dispatch_async(dispatch_get_main_queue(), { 
      TXNotificationSystem.postGlobalNotification(text: "\(error)", textColor: UIColor.redColor()) 
      }) 
     } 
    } 
    } 

我得到錯誤代碼2:無法解密領域。

如果我使用在主線程上執行寫操作的那個,我似乎沒有得到這個錯誤。

任何人都知道爲什麼它給我這個錯誤?

回答

0

如果您的領域之前未加密,則不能只通過配置加密密鑰來添加加密。領域會認爲磁盤上的文件已經被加密並嘗試解密。

您需要打開沒有加密密鑰的領域並使用- [RLMRealm writeCopyToPath:encryptionKey:error:]來編寫加密副本。然後,您可以刪除原始未加密的.realm文件,並使用加密密鑰集打開加密副本。

相關問題