本文将 iOS 常见问题及解决方法整理如下:
如何设置统一存储用户态?
解答:接入 mPaaS 的应用会使用自己的账号体系,如果需要使用统一存储来管理用户态数据,请第一时间通知统一存储,让统一存储进行用户数据库的切换,再通知其它业务层。
[[APDataCenter defaultDataCenter] setCurrentUserId:userId];
当用户登出时,可以不调用 setCurrentUserId 方法,统一存储会继续打开上一个用户的数据库,不会产生影响。
如何设置自己的默认加密 key?
解答:统一存储提供默认的加密方法,密钥会使用 mPaasInit 方法传入的 appKey 来自动生成,建议接入 mPaaS 的应用使用自己的密钥。
实现 mPaasAppInterface 接口的下列方法,将密钥以 NSData 的方式传给统一存储。
#pragma mark 统一存储
/**
* 如果实现这个方法,要把统一存储默认使用的加密 key 返回,32 字节。这个 key 应用可以使用无线保镖管理,也可以自己加密混淆后写在客户端。
* 如果不实现也可以,统一存储会使用 mPaas 和 appKey 计算出的一个结果做为加密 key,安全性也足够了。
*
* @return 32 字节的 key,放在 NSData 里
*/
- (NSData*)appDataCenterDefaultCryptKey;
建议应用生成自己的 32 字节密钥,并转成 Base64 字符串保存在无线保镖中,在此方法里通过无线保镖的静态接口取出这个字符串,并反解成 NSData。
统一存储是线程安全的吗?
解答:是的,统一存储的数据存储接口都考虑了线程安全性问题,可以在任意线程进行调用。
如何解决与百度地图 SDK 的冲突?
描述:当与某一版本的百度地图 SDK 集成时,可能出现如下 crash。
解答:您需要在 App 初始化时进行如下设置(10.1.32 及以上版本支持)。
#import <MPDataCenter/APDataCenter.h>
// App 初始化方法中设置
APDataCenter.compatibility = YES;
archiveObject 是如何存储和读取变量的?
解答:请参考以下代码:
- 对象持久化存储:
MPCodingData *obj = [MPCodingData new]; obj.name = @"Amelia";: obj.age = 1; [APUserPreferences archiveObject:obj forKey:@"archObjKey" business:dataBusiness];
统一存储中- 读取变量:
MPCodingData *encodeObj = [APUserPreferences objectForKey:@"archObjKey" business:dataBusiness];
文档内容是否对您有帮助?