如何使用将脱机工作的Parse创建数据库?

时间:2015-07-02 20:14:50

标签: ios parse-platform realm

我的应用是一个包含电话号码和位置等基本内容的目录。这将是许多条目,我将不得不每周更新数据库,我不想依赖我的用户使用App商店更新他们的应用程序,所以我希望数据每当他们连接到互联网时都会更新,但我希望所有数据都存储在本地,这样他们就可以使用它,即使他们没有互联网访问权限。对于我的第一个应用程序,它证明是非常棘手的:)

我想我必须使用Parse所以我可以随时更新数据库,以及Realm(https://realm.io/)或Core Data(希望不是核心数据:()。阅读有关Parse的本地数据存储的信息,如果能够满足我的需求,我肯定会使用它。我喜欢Realm的简单性,如果我有这样的话使其与Parse一起使用,这将是我想要采取的路线。

有人可以告诉我一个关于他们如何做这件事的例子吗?如果PFObject或RLMObject被称为person并且有两个字符串(电话号码和名称,您如何从Parse.com到设备(本地存储)?

这是额外的,我甚至不知道它是否可能*

当应用程序从App Store下载时,它是否可以从Parse下载数据?在第二个用户打开应用程序时,即使他们不再具有互联网访问权限,数据也会在本地存储并可供他们使用。

(我只知道Swift,但如果有人愿意向我展示一些代码片段,可能能够理解obj-c)

任何帮助都将非常感谢:)

1 个答案:

答案 0 :(得分:1)

来自Realm的乔。

首先从Parse中检索一个对象,你需要这样做:

var query = PFQuery(className:"GameScore")
query.whereKey("playerName", equalTo:"Sean Plott")
query.findObjectsInBackgroundWithBlock {
  (objects: [AnyObject]?, error: NSError?) -> Void in

  if error == nil {
    // The find succeeded.
    println("Successfully retrieved \(objects!.count) scores.")
    // Do something with the found objects
    if let objects = objects as? [PFObject] {
      for object in objects {
        println(object.objectId)
      }
    }
  } else {
    // Log details of the failure
    println("Error: \(error!) \(error!.userInfo!)")
  }
}

您可以阅读有关此here

的更多信息

一旦你检索了你的对象,我会像你在这里看到的那样遍历它们

  for object in objects {
    println(object.objectId)
  }

然后我会使用Realm' Realm().create(_:value:update:)(如下面的代码所示)。你需要确保你有一个主键来使用它(我会使用parse的objectId作为Realm中的主键)。以下是Realm中的how you set a primary key

我将如何将它们导入Realm的示例将是这样的(其中Venue是对象在Realm中存储的方式的类):

  let realm = Realm()
  realm.write {
    for object in objects {
      realm.create(Venue.self, value: object, update: true)
    }
  }

您可以阅读有关导入here

的更多信息

最后,你这样做的逻辑取决于你。你可以在每次打开应用程序时执行此操作。将本地数据库与服务器上的数据库同步的一件事是,检查另一个表可能称为LastUpdated是件好事。如果您需要更新本地数据库,此表将通知您。总的来说,这是一个非常手动的过程,但这取决于具体情况以及您希望如何构建应用程序。