APDataCenter 為統一存儲的入口類,為一個單例,可在代碼任意地方調用。
[APDataCenter defaultDataCenter]
也可以使用宏。
#define APDefaultDataCenter [APDataCenter defaultDataCenter]
接口介紹
宏定義
#define APDefaultDataCenter [APDataCenter defaultDataCenter]
#define APCommonPreferences [APDefaultDataCenter commonPreferences]
#define APUserPreferences [APDefaultDataCenter userPreferences]
#define APCurrentVersionStorage [APDefaultDataCenter currentVersionStorage]
常量定義
以下幾個事件通知業務代碼通常無須關注,但是統一存儲會拋出這些通知。
/**
* 前一個用戶的數據庫文件將要關閉的事件通知
*/
extern NSString* const kAPDataCenterWillLastUserResign;
/**
* 用戶狀態已經發生切換的通知。有可能是 user 變為 nil 了,具體 userId 可以用 currentUserId 來獲取。
* 這個通知附加的 object 是個字典,如果不為 nil,里面 @"switched" 這個鍵值返回 @YES 表示確實發生了用戶切換事件。
*/
extern NSString* const kAPDataCenterDidUserUpdated;
/**
* 用戶并沒切換,APDataCenter 重新收到登入事件。會拋這個通知。
*/
extern NSString* const kAPDataCenterDidUserRenew;
接口與屬性
void APDataCenterLogSwitch(BOOL on);
打開或關閉統一存儲的控制臺 log,默認為打開。
@property (atomic, strong, readonly) NSString* currentUserId;
獲取當前登錄用戶的 userId。
(NSString*)preferencesRootPath;
獲取存儲 commonPreferences 和 userPreferences 數據庫文件夾的路徑。
(void)setCurrentUserId:(NSString*)currentUserId;
設置當前登錄的用戶 ID,業務代碼請不要調用,需要由登錄模塊調用。設置用戶 ID 后,userPreferences 會指向這個用戶的數據庫。
(void)reset;
完全重置整個統一存儲目錄,請謹慎使用。
(APSharedPreferences*)commonPreferences;
與用戶無關的全局存儲數據庫。
(APSharedPreferences*)userPreferences;
當前登錄用戶的存儲數據庫。不是登錄態時,取到的是 nil。
(APSharedPreferences*)preferencesForUser:(NSString*)userId;
返回指定用戶 ID 的存儲對象,業務層通常使用 userPreferences 方法即可。當有異步存儲需要時,防止竄數據,可以使用該方法取特定用戶的存儲數據庫。
(APPreferencesAccessor*)accessorForBusiness:(NSString*)business;
根據 business 名生成一個存取器,業務層需要持有這個對象。使用這個存取器后,訪問 KV 存儲就不需要再傳 business 了。
APPreferencesAccessor* accessor = [[APDataCenter defaultDataCenter] accessorForBusiness:@"aBiz"];
[[accessor commonPreferences] doubleForKey:@"aKey"];
// 等價于
[[[APDataCenter defaultDataCenter] commonPreferences] doubleForKey:@"aKey" business:@"aBiz"];
(APCustomStorage*)currentVersionStorage;
統一存儲會維護一個當前版本的數據庫,當版本發生升級時,這個數據庫會重置。
(id<APDAOProtocol>)daoWithPath:(NSString*)filePath userDependent:(BOOL)userDependent;
從一個配置文件生成 DAO 訪問對象。
參數說明
參數 | 說明 |
filePath | DAO 配置文件的文件路徑。在 main bundle 里的文件使用下面方式: |
userDependent | 指定這個 DAO 對象操作哪個數據庫。如果 |
返回值
DAO 對象。業務不用關心它的類名,只需要使用業務自己定義的 id<AProtocol>
強制轉換一下即可。返回的 DAO 對象,在需要時也可以使用 id<APDAOProtocol>
進行轉換,調用默認提供的方法。所以自定義的 AProtocol
不要含有 APDAOProtocol
里定義的方法。
(id<APDAOProtocol>)daoWithPath:(NSString*)filePath databasePath:(NSString*)databasePath;
創建一個維護自己獨立數據庫文件的 DAO 訪問對象,而不使用 APSharedPreferences。使用 daoWithPath:userDependent:
接口創建的 DAO 對象,操作的是 commonPreferences
或 userPreferences
。這個接口會創建一個 DAO 對象,并且操作的是 databasePath
指定的特定數據庫文件,若文件不存在則會創建此文件。可以創建多個 DAO 對象,指定相同的 databasePath
。
參數說明
參數 | 說明 |
filePath | 同 |
databasePath | DAO 數據庫文件的位置,可以傳絕對路徑,也可傳 |
返回值
DAO 對象。