菜鸟教程小白 发表于 2022-12-13 08:53:29

ios - 如何使用 Parse 创建一个可以离线工作的数据库?


                                            <p><p>我的应用是一个包含电话号码和位置等基本信息的目录。会有很多条目,我必须每周更新一次数据库,我不想依赖我的用户使用 App Store 更新他们的应用程序,所以我希望在他们连接到时更新数据互联网,但我希望所有数据都存储在本地,这样即使他们无法访问互联网,他们也可以使用它。对于我的第一个应用程序,它被证明是相当棘手的 :) </p>

<p>我想我必须使用 Parse,这样我就可以在需要时更新数据库,以及诸如 Realm (<a href="https://realm.io/" rel="noreferrer noopener nofollow">https://realm.io/</a>) 或 Core Data(希望不是 Core Data :( )之类的东西。我阅读了 Parse 的 Local DataStore,如果有办法让它满足我的需求,我肯定会使用它。不过,我喜欢 Realm 的简单性,如果我有办法让它与 Parse 一起工作,那将是我想要的路线采取。</p>

<p>有人可以给我举个例子来说明他们如何去做吗?如果 PFObject 或 RLMObject 被称为 person 并且有两个字符串(电话号码和姓名,您将如何将其从 Parse.com 获取到设备(本地存储)?</p>

<p>这是一个额外的,我什至不知道它是否可能*</p>

<p>当应用从 App Store 下载时,它可以从 Parse 下载数据吗?就像用户打开应用程序的那一刻一样,即使他们不再可以访问互联网,数据也会在本地存储并可供他们使用。 </p>

<p>(我只知道 Swift,但如果有人愿意给我看一些代码片段,我可能能够理解 obj-c)</p>

<p>任何帮助将不胜感激:)</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>来自 Realm 的 Joe。</p>

<p>首先要从 Parse 中检索对象,您需要这样做:</p>

<pre><code>var query = PFQuery(className:&#34;GameScore&#34;)
query.whereKey(&#34;playerName&#34;, equalTo:&#34;Sean Plott&#34;)
query.findObjectsInBackgroundWithBlock {
(objects: ?, error: NSError?) -&gt; Void in

if error == nil {
    // The find succeeded.
    println(&#34;Successfully retrieved \(objects!.count) scores.&#34;)
    // Do something with the found objects
    if let objects = objects as? {
      for object in objects {
      println(object.objectId)
      }
    }
} else {
    // Log details of the failure
    println(&#34;Error: \(error!) \(error!.userInfo!)&#34;)
}
}
</code></pre>

<p>您可以阅读更多关于此 <a href="https://parse.com/docs/ios/guide#queries" rel="noreferrer noopener nofollow">here</a> 的信息</p>

<p>一旦你检索到你的对象,我会像你在这里看到的那样循环遍历它们</p>

<pre><code>for object in objects {
    println(object.objectId)
}
</code></pre>

<p>然后我会使用 Realm 的 <a href="https://realm.io/docs/swift/latest/api/Classes/Realm.html#/s:FC10RealmSwift5Realm6createFS0_U__FTMQ_5valuePSs9AnyObject_6updateSb_Q_" rel="noreferrer noopener nofollow"><code>Realm().create(_:value:update:)</code></a> (如下面的代码所示)。你需要确保你有一个主键来使用它(我会使用 parse 的 objectId 作为 Realm 中的主键)。这里是 <a href="https://realm.io/docs/swift/latest/#customizing-models" rel="noreferrer noopener nofollow">how you set a primary key</a>在 Realm 中。</p>

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

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

<p>您可以阅读有关导入 <a href="https://realm.io/docs/swift/latest/#rest-apis" rel="noreferrer noopener nofollow">here</a> 的更多信息</p>

<p>最后,何时执行此操作的逻辑取决于您。您可以在此人每次打开应用程序时执行此操作。将本地数据库与服务器上的数据库同步的一件事是,最好只检查另一个可能称为 LastUpdated 的表。如果您需要更新本地数据库,此表将通知您。总体而言,这是一个非常手动的过程,但这取决于具体情况以及您希望如何构建应用程序。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何使用 Parse 创建一个可以离线工作的数据库?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/31193853/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/31193853/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何使用 Parse 创建一个可以离线工作的数据库?