保存和加载UITableView数组 - iOS Swift Parse

3
我有以下代码;从 Parse 后端获取数据并将类实例加载到 NSArray 中,以插入到 UITableView 中。
var ObjectIDClass = PFQuery(className: "TestObject")

ObjectIDClass.findObjectsInBackgroundWithBlock({
  (ObjectsArray : [AnyObject]?, error: NSError?) -> Void in

  var ObjectIDs = ObjectsArray as! [PFObject]
  for i in 0...ObjectIDs.count-1 {
    self.iDArray.append(ObjectIDs[i].valueForKey("objectId") as! String)
    self.NameArray.append(ObjectIDs[i].valueForKey("PDFName") as! String)
    self.tableView.reloadData()
  }
})

这仅在有网络连接时才能正常工作,一旦应用程序关闭并重新打开但没有网络,则表格为空。我的目标是将数据存储在本地数据存储中,并且如果没有连接,则从本地数据存储加载。我无法使用pin找出如何做到这一点,但确定它就是这样完成的。任何帮助都将不胜感激!


findObjectsInBackgroundWithBlock是一个同步方法,因此您必须连接以查询数据。您想要做什么? - Lamour
我希望你是指“异步”的 @Lamar。 - soulshined
1个回答

2

不要仅仅专注于本地数据存储(Local Datastore),这并不是一件坏事。我只是觉得你之所以这样做,仅仅是因为你想在用户处于飞行模式或网络条件较差时访问那些数据。如果是这样的话,你可以利用Parse内置的缓存系统。默认情况下,PFQuery缓存设置为忽略缓存。这意味着,从服务器传入的所有信息都不会存储在用户硬盘上的临时文件夹中(正是你所需要的)。因此,您必须明确告知对象在设备上缓存使用他们众多的缓存策略之一

对于您来说,这将是很好的:

query.cachePolicy = .CacheElseNetwork
// Results were successfully found, looking first on the
// disk and then on network.
query.findObjectsInBackgroundWithBlock {

您可以查看其他缓存选项:https://www.parse.com/docs/ios/guide#queries-caching-queries 小提示:请不要将变量名大写。这不符合正确的命名约定。`ObjectIdDClass` 应该与其类别有些相似,因此应该称为 `query` 或其他名称。而 `ObjectsArray` 应该是 `objects`,因为您已经知道它是一个数组,并且不会将任何不是类的东西大写,通常这样更易于阅读。

非常感谢。你说得对,我一直固定在本地数据存储上,但是查看文档时,似乎并不适合这个目的。谢谢你的建议...我是在10年前学到的,之后就忘记了要遵循的规范!这确实让它更美观。 - Tom
很好,@Tom。在Stack Overflow上,接受解决问题的答案是礼仪之一。如果这个回答有用,请通过选择旁边的勾选标记来接受它。http://meta.stackexchange.com/a/5235虽然我并不太在意,但其他努力赚取声望的用户会希望得到赞扬。此外,它还让其他遇到相同问题的用户知道这个答案是正确的,他们也应该在自己的项目中实施它,同时减少了重复问题的出现。 - soulshined
感谢您的解释 - 感谢您的帮助和耐心! - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接