在这个Swifui领域教程中,您将学习如何通过构建药水购物列表应用程序作为数据持久解决方案使用Swifui作为数据持久性解决方案。


这是原始条目的同伴讨论主题 //www.ohdvia.icu/12235561-realm-with-swiftui-tutorial-getting-started

应用程序不会响应删除操作一旦创建了成分,但只能在清除后台和重新开放后响应,​​您可以帮助吗?

嗨fahath,你好吗?
你能告诉我这篇文章发生的部分吗?此外,您能与我们分享您的代码吗?
谢谢!

嘿,

我真的很喜欢你的教程进入领域。一个问题:将RealMResult与成分转换为阵列的原因是什么?我试图使结果不公众,并且当我把结果放在牧场中并从每一行中取出道具时具有相同的功能。它是否使程序更安全或出于不同的原因?

斯蒂芬

你好 @ stefan51278 !!我真的很高兴你喜欢它!非常感谢你。

至于您的问题,Realm会跟踪其开奖结果3d(托管开奖结果3d),并且只要更改开奖结果3d时,它会随时更新应用程序的所有引用。从realm中删除一个开奖结果3d时,框架使该开奖结果3d(将其标记为无效),如果您尝试通过其任何引用访问其属性,则框架抛出异常。内部SWIFTUIS Foreach一旦触发视图重载,就会对旧开奖结果3d引用旧开奖结果3d。当视图重载是触发器时,SWIFTUI尝试访问已删除的开奖结果3d并触发异常。通过转换为模型开奖结果3d(成分),我们可以自由地与其引用一起工作。

希望这能回答你的问题!随意提出更多问题。 :]

1 Like

谢谢你的教程。对我来说非常有帮助。我很乐意看到更多教程深入了解如何使用SWIFTUI和联合使用领域。

一个次要的nitpick ...在“删除开奖结果3d”部分中,您可以使用代码找到开奖结果3d:

guard let ingredientDB = boughtIngredientResults.first(where: { $0.id == ingredientID })

这将迫使谓词在每一个条目上运行,如果有很多数据,那么很浪费。相反,您可以通过其主键(它将使用快速索引查找)来查找它:

guard let ingredientDB = realm.object(ofType: IngredientDB.self, forPrimaryKey: ingredientID)

你好 @drivingjohn. 。非常感谢你,我很高兴你喜欢它!
确实使用王国来查找物体是一种更有效的方式,很好抓住!我会考虑更新文章。谢谢! :]

谢谢你的教程。是否有可能使Realm与预览作用?

你好 @tudatn. .

是的,可以遇到一系列问题。由于每个预览是一种模拟器,因此您必须在每次预览中处理模型迁移,就像任何其他模拟器一样。这可能有点麻烦,因为Xcode预览在达到显示错误时尚未被讨论。

一个很好的方法,你可以走到这一点是在内存中使用领域,这样你就不必担心,你可以在预览数据中使用一个内存领域。

在通过教程的第一部分工作后添加和获取数据(但在使用新属性更新模型之前),我运行了应用程序并收到此错误:

"Fatal error: Failed to open Realm. Error. Provided schema version 0 is less than last set version 1".

我可以通过进入模拟器来解决这个问题,然后进入设备菜单并选择“删除所有内容和设置...”,此后,应用程序ran。以为我会在别人遇到这个问题的情况下分享这一点。我必须在一些早期阶段运行应用程序,以导致架构版本号的这种差异。那是我的猜测。

这本书仍然可用吗? //store.ohdvia.icu/products/realm-building-modern-swift-apps-with-realm-database

你好 @tomp. .

你肯定是对的。这可能是通过运行最终项目或在某种程度上更改模型的属性(因为拼写错误而更改模型的属性,例如可能导致此)。

在开发期间修复此方法的另一种方法是通过从模拟器中删除应用程序并再次运行它。

你好 @spencerfeng.

这本书已被推翻,所以我们不再支持它了。您仍然可以阅读并在此处查找其材料: //bit.ly/2N30PKO

谢谢 @ renan.dias. ,我可以知道这本书被推翻的原因吗?

谢谢renan为伟大的教程。我今天刚刚完成了它,并学到了很多关于在Swifui的领域工作。我喜欢这种使用realm的方式如何允许您在视图中使用结构而不是直接使用域开奖结果3d。

我确实有一个关于如何扩展到常见场景的一般问题。如果您有一个项目列表,并且您希望使用SWIFTUI列表中内置的.OnMove方法重新排序它们,商店代码中可能看起来像什么?换句话说,您如何更新Realm List属性的顺序?

你好 @tomp. 。我很高兴你喜欢它!该团队在这篇文章上努力工作。 :]

关于您关于列表订单的问题。我不认为你能够直接使用swifuis .onmove,就像你可以用一个简单的数组。您必须有一种方法来处理.OnMove,然后自己移动开奖结果3d。这样做的方法是通过将属性“订单”添加到域开奖结果3d并在变化时更新它。从Realm获取开奖结果3d时,您可以使用Sort方法执行此操作。这一点的东西:
realm.objects(IngredientDB.self).sort(byKeyPath: "order", ascending: false)

这是一个很好的教程,我真的很喜欢这种方法。我试图用另一个应用程序扩展它,我正在测试我有一个类是类别的类,另一个是类别开奖结果3d具有域问题的问题。

class CategoryDB Object {
  @objc dynamic var id = 0
  @objc dynamic var name = ""
  let questions = List<QuestionDB>()

 override class func primaryKey() -> String? {
    "id"
 }

}

我所拥有的问题是,当我向类别的问题列表导航并尝试添加问题时,它更新域数据库,但我的视图不会刷新。我必须备份类别列表,然后返回问题列表视图,以查看更新的问题列表。
我不知道如何向商店发送更新,以便在添加新问题并将其附加到我的域列表开奖结果3d时,它也将刷新该视图。

现在,我不希望在这里答案,但很高兴看到更多的教程和Swifui可以处理更多的复杂模型,我们确实有列表或链接object

你好 @createch. 。感谢您阅读这篇文章。我很高兴你喜欢它。

关于您拥有的问题,可能发生这种情况,因为您的视图是观察类别开奖结果3d而不是数组本身的更改。一个示例是当您有数组并且更改此阵列的开奖结果3d时。根据您这样做的方式,这个swifui不会看到更改。我不能在不看代码的情况下差别说,但是您也可以尝试通过观察到的ObseralWillChject手动向UI发送更新。你通常不需要这个,但我说我不能在没有读取代码的情况下说太多。

关于与Realm和Swifui的更多教程,我将与我们的团队讨论有可能与这些科目发布更多教程的可能性。 :]

您仍然可以从本书中学到很多,但它暂不在一段时间内更新。由于与SWIFTUI和REARM一起工作有点不同于书中所描绘的(它甚至没有为SWIFTUI的部分)和新功能被引入框架,这本书不包含所有这些新功能,并且它已经存在弃用。
Realm一直在更新,为Swifui提供全力支持,它应该在不久的将来发布一些新功能。