簡體   English   中英

如何處理多用戶數據庫

[英]How to deal with a multiple-user database

我的應用程序就像很多應用程序 - 它有一個用戶輸入用戶名和密碼的登錄屏幕,以及一個登錄按鈕我的應用程序也使用Core Data來保存大多數用戶的業務對象,當然這是用戶特定的。

我還有一個注銷按鈕,可以切換用戶。 這不會發生很多,但仍然是必要的)。

現在,如果其他用戶登錄,我需要獲取他的特定數據。 但是我該怎么辦呢?
我不想在他注銷時刪除用戶的數據庫,即使其他用戶從設備登錄也要保存。

我唯一能想到的是為每個通過Core Data保存的Entity添加一個“ownerId”屬性,並在我獲取對象時將此屬性用作謂詞。
但這似乎太亂了。

iOS實際上沒有多個用戶的概念,因此“登錄”的范圍將限制在您的應用程序中。 最簡單的解決方案是為每個用戶使用不同的文件名作為持久性存儲。 這只是在一個地方(無論你在哪里設置核心數據堆棧)派生,所以實現起來非常簡單。

在標准核心數據模板中,持久性存儲位置設置在應用程序委托的persistentStoreCoordinator方法中。 就是這條線:

 NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"coreDataTemplate.sqlite"];

這基本上意味着數據將存儲在documents目錄中的sqlite數據庫文件中,該文件將被稱為coreDataTemplate.sqlite

假設在執行此代碼之前,您已經讓用戶登錄,並根據某些列表檢查了他們的用戶ID,並為他們提供了唯一的標識符。 進一步假設標識符已存儲在用戶默認值中。

將上面的行更改為:

NSString *userIdentifier = [[NSUserDefaults standardUserDefaults] stringForKey:@"loggedOnUserID"];     
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@_coreDataTemplate.sqlite",userIdentifier]];

現在,這將為您的用戶提供唯一的文件名。

如果更改用戶,則需要保存當前的托管對象上下文,然后將應用委托的持久性存儲協調器和托管對象上下文設置回nil。 重新加入時,它將在新的用戶ID下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM