如何使用 Parse 创建可以离线工作的数据库?
How to create a database using Parse that will work offline?
我的应用程序是一个包含 phone 数字和位置等基本内容的目录。会有很多条目,我将不得不每周更新一次数据库,我不想依赖我的用户使用 App Store 更新他们的应用程序,所以我希望在他们连接到时更新数据互联网,但我希望所有数据都存储在本地,这样即使他们无法访问互联网也可以使用它。对于我的第一个应用程序,事实证明它非常棘手 :)
我想我必须使用 Parse,这样我就可以在需要时更新数据库,以及 Realm (https://realm.io/) 或 Core Data(希望不是 Core Data :( ) 之类的东西。我阅读有关 Parse 的 Local DataStore 的信息,如果有办法让它满足我的需求,我肯定会使用它。不过我喜欢 Realm 的简单性,如果我有办法让它与 Parse 一起工作,那就是路线我想带。
谁能给我举个例子,说明他们是如何着手做这件事的?如果 PFObject 或 RLMObject 被称为 person 并且有两个字符串(phone 数字和名称,您如何将其从 Parse.com 获取到设备(本地存储)?
这是额外的,我什至不知道是否可能*
应用程序从App Store 下载时,是否可以从Parse 下载数据?就像在用户打开应用程序的那一刻,即使他们不再有互联网访问权限,数据也会存储在本地并可供他们使用。
(我只知道 Swift 但如果有人愿意给我看一些代码片段,我可能能够理解 obj-c)
任何帮助都将不胜感激:)
来自 Realm 的 Joe。
首先要从 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 的 Realm().create(_:value:update:)
(shown in code below). You need to make sure you have a primary key to use this though (I would use parse's objectId as the primary key in Realm). Here is how you set a primary key。
我如何将它们导入 Realm 的示例如下(Venue 是对象在 Realm 中存储方式的class):
let realm = Realm()
realm.write {
for object in objects {
realm.create(Venue.self, value: object, update: true)
}
}
您可以阅读有关导入的更多信息here
最后,何时执行此操作取决于您的逻辑。每次此人打开应用程序时,您都可以这样做。将本地数据库与服务器上的数据库同步的一件事是,最好检查另一个 Table 可能称为 LastUpdated。 table 会通知您是否需要更新本地数据库。总体而言,这是一个非常手动的过程,但这取决于具体情况以及您希望如何构建应用程序。
我的应用程序是一个包含 phone 数字和位置等基本内容的目录。会有很多条目,我将不得不每周更新一次数据库,我不想依赖我的用户使用 App Store 更新他们的应用程序,所以我希望在他们连接到时更新数据互联网,但我希望所有数据都存储在本地,这样即使他们无法访问互联网也可以使用它。对于我的第一个应用程序,事实证明它非常棘手 :)
我想我必须使用 Parse,这样我就可以在需要时更新数据库,以及 Realm (https://realm.io/) 或 Core Data(希望不是 Core Data :( ) 之类的东西。我阅读有关 Parse 的 Local DataStore 的信息,如果有办法让它满足我的需求,我肯定会使用它。不过我喜欢 Realm 的简单性,如果我有办法让它与 Parse 一起工作,那就是路线我想带。
谁能给我举个例子,说明他们是如何着手做这件事的?如果 PFObject 或 RLMObject 被称为 person 并且有两个字符串(phone 数字和名称,您如何将其从 Parse.com 获取到设备(本地存储)?
这是额外的,我什至不知道是否可能*
应用程序从App Store 下载时,是否可以从Parse 下载数据?就像在用户打开应用程序的那一刻,即使他们不再有互联网访问权限,数据也会存储在本地并可供他们使用。
(我只知道 Swift 但如果有人愿意给我看一些代码片段,我可能能够理解 obj-c)
任何帮助都将不胜感激:)
来自 Realm 的 Joe。
首先要从 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 的 Realm().create(_:value:update:)
(shown in code below). You need to make sure you have a primary key to use this though (I would use parse's objectId as the primary key in Realm). Here is how you set a primary key。
我如何将它们导入 Realm 的示例如下(Venue 是对象在 Realm 中存储方式的class):
let realm = Realm()
realm.write {
for object in objects {
realm.create(Venue.self, value: object, update: true)
}
}
您可以阅读有关导入的更多信息here
最后,何时执行此操作取决于您的逻辑。每次此人打开应用程序时,您都可以这样做。将本地数据库与服务器上的数据库同步的一件事是,最好检查另一个 Table 可能称为 LastUpdated。 table 会通知您是否需要更新本地数据库。总体而言,这是一个非常手动的过程,但这取决于具体情况以及您希望如何构建应用程序。