菜鸟教程小白 发表于 2022-12-13 02:28:20

ios - 核心数据替代品


                                            <p><p>在使用 Core Data 定义我的模型时遇到了一些问题。</p>

<p><strong>1.无法即时创建对象。</strong></p>

<p>我希望能够创建如下所示的对象并继续为其属性添加值。</p>

<pre><code>let action = Action()
action.desc = &#34;hello&#34;
</code></pre>

<p>但如果您使用的是 Core Data 模型类,则不能这样做,因为您会收到错误<strong>Failed to call specified initializer on NSManagedObject class</strong>。您必须使用 <code>initWithEntity:insertIntoManagedObjectContext:</code> 和所有创建一个新对象。</p>

<p><强>2。不能在函数中使用类类型作为返回类型。</strong></p>

<p>使用 Core Data 时,我保留一个单独的文件来放置所有获取/保存方法。在其中,我有一个用于检索所有 <code>Action</code> 对象作为数组的方法。</p>

<pre><code>public func loadActions() -&gt; {
    let fetchRequest = NSFetchRequest()
    let entityDescription = NSEntityDescription.entityForName(&#34;Action&#34;, inManagedObjectContext: managedObjectContext!)
    fetchRequest.entity = entityDescription

    var error: NSError?
    let result = managedObjectContext?.executeFetchRequest(fetchRequest, error: &amp;error)

    return result!
}
</code></pre>

<p>我不能使用 <code>Action</code> 类型来创建类型化数组,因为我会收到错误 <strong>Method cannot be declared public 因为它的结果使用内部类型</strong>。所以我必须将数组作为 <code>AnyObject</code> 的数组,然后在我必须使用它们时将它们转换为 <code>Action</code>。</p>

<p><strong>3.类中不能有方法。</strong></p>

<p>我知道您可以在 Objective-C 中创建类别并将所有方法放入其中。我猜 Swift 中的等价物是扩展(?)。但是,如果您可以将类及其方法完全放在同一个地方,那就太好了。</p>

<p>假设我走 OO 道路并以正常方式创建整个模型,这带来了我的问题。我可以如何以及在哪里保存这些对象?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这不是真正的答案,但我认为第 2 点和第 3 点无效?</p>

<ol 开始=“2”>
<li><p>不要公开你的方法——这里的问题与核心数据无关,而是与 Swift 的访问级别有关。您不能创建返回内部类型 <code>Action</code> 的公共(public)方法 <code>loadActions</code>。您必须将 <code>Action</code> 公开,或将方法设为内部(即删除单词 <code>public</code>)</p></li>
<li><p>你可以在类中拥有方法 - 只需将它们写在那里?而且即使你需要使用扩展名,你仍然可以将它放在同一个文件中吗?</p></li>
</ol>

<p>PS 如果你确实找到了一个好的 Swift 替代品,请告诉我。我现在正在寻找一个 - 这就是我首先找到您的问题的方式!</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 核心数据替代品,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/26175683/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/26175683/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 核心数据替代品