2015-02-17 80 views
0

我在查询Parse以返回用户创建的所有Tournament对象的列表。但是,saveEventually()取消了LDS中的对象,因此如果它们具有网络连接,则查询将返回空白。使用fromLocalDataStore()和saveEventually进行PFQuery缓存()

override func viewDidLoad() { 
    super.viewDidLoad() 

    var query = PFQuery(className:"Tournament") 
    query.orderByAscending("createdAt") 
    query.whereKey("createdBy", equalTo: PFUser.currentUser()) 
    query.fromLocalDatastore() 
    query.findObjectsInBackgroundWithBlock { 
     (objects: [AnyObject]!, error: NSError!) -> Void in 
     if (error == nil) { 
      self.tournaments = objects; 
      self.tableView.reloadData() 
      PFObject.pinAllInBackground(objects) 
     } else { 
      NSLog("Error: %@ %@", error, error.userInfo!) 
     } 
    } 
} 

我想保留创建的所有对象在本地缓存,以便它们可以脱机访问。这可能吗?

回答

0

您可以只使用saveInBackgroundWithBlock连接数据(将其保存到本地数据存储区)。这将同时将它同步到LDS和您的分析服务器,而不会在网络保存操作完成时从LDS中删除任何内容。

更好的是,您可以为PFQuery创建一个类别,该类别定义了一个名为saveToCacheAndNetworkInBackgroundWithBlock:(或不太详细的)的新方法,可以在不使用saveEventually的情况下执行这两个操作。

+0

如果我们在应用程序离线时调用saveInBackgroundWithBlock,会发生什么情况?一旦像[saveEventually](https://parse.com/docs/ios_guide#objects-offline/iOS)那样恢复网络连接,最终是否会保存它?所有数据都同步到Parse非常重要。 – Fenda 2015-02-18 13:33:54

+0

如果您在用户离线时调用'saveInBackgroundWithBlock:',则请求将失败并返回错误并解析将不会尝试重试。 – hhanesand 2015-02-18 19:15:42