我尝试使用Parse实现缓存策略。这是我从Parse查询数据的地方,也是我使用缓存策略的地方:
func findEmployeeForLoggedInUser(completion: (array: [AnyObject], error: String?) -> Void) {
if PFUser.currentUser() != nil {
let query = PFQuery(className: "Employee")
query.cachePolicy = PFCachePolicy.CacheElseNetwork //CACHE POLICY
query.whereKey("employerId", equalTo: PFUser.currentUser()!.objectId!)
query.findObjectsInBackgroundWithBlock { (results, error) -> Void in
var employeeArray = [PFEmployee]()
if let error = error {
let errorString = error.userInfo?["error"] as? String
completion(array: employeeArray, error: errorString)
} else {
for employee in results! {
let currentEmployee: PFEmployee = employee as! PFEmployee
employeeArray.append(currentEmployee)
}
completion(array: employeeArray, error: nil)
}
}
}
}
此外,每次用户登录或注册时,我都会使用以下代码行:PFQuery.clearAllCachedResults()
来清除所有缓存的结果。
当我尝试运行应用程序时,它会崩溃,这是调试区域中的错误消息:
2015-07-16 14:53:38.644员工守护者[73678:5099293] [错误]:最终错误地运行命令:错误域=解析代码= 209"会话令牌无效" UserInfo = 0x7fe150712ef0 {code = 209,originalError = Error Domain = NSURLErrorDomain Code = -1011"无法完成操作。 (NSURLErrorDomain错误-1011。)",temporary = 0,错误=无效的会话令牌,NSLocalizedDescription =无效的会话令牌} 2015-07-16 14:54:01.172员工守护者[73678:5098808] ***由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'启用固定时不允许使用方法。 #39;
libc ++ abi.dylib:以NSException类型的未捕获异常终止
我做错了什么?
答案 0 :(得分:1)
正如你在日志的最后一行写的那样:
"Method not allowed when Pinning is enabled."
如果您查看official Parse documentation for PFQuery
,更具体地说是cachePolicy
属性,那么就写了:
The cache policy to use for requests.
Not allowed when Pinning is enabled.
所以不幸的是,它目前无法混淆固定功能和缓存功能。
如果您没有使用本地数据存储区功能,那么我建议您只需禁用此功能并使用缓存功能。
如果您依赖本地数据存储区功能,那么我建议您使用本地数据存储区实现自己的某种缓存功能。