【问题标题】:Saving temporary data in userdefaults?在 userdefaults 中保存临时数据?
【发布时间】:2016-12-30 17:06:15
【问题描述】:

我的屏幕上有根据 Firebase 数据放置在屏幕上的视图。当视图最初种植在屏幕上时,它会从 firebase 中提取保存的 x 和 y 并使用它来将自己放置在屏幕上。

视图是可拖动的,因此当用户拖动视图、离开页面并返回视图时,我希望不再从旧的 firebase 数据中提取视图,而是从本地保存的新 x/y 中提取一些视图。在我所做的只是在触摸结束时更新 firebase 上的 x /y 之前,但这对于许多用户来说是非常不切实际的,而且这似乎没有必要。

我有一个超级草率的想法是当触摸结束时通过执行以下操作将 x / y 保存在 userdefaults 中:

1) 每个视图都有一个绑定的 Firebase UID,所以抓住它

2) 在触摸结束时抓取按钮的 X 和 Y 位置

3) 将键名设为 String(UID + "xCoord"),并将 Y 设为一个,并将值保存在那里

4) 当我在寻找要绘制的视图的 x / y 值时,检查是否为该 UID 的 Xcoord + Ycoord 设置了用户默认值,否则请转到 firebase。

然后,为了清理我的用户默认设置,我可以检查是否有任何 UID 存在于我将再次加载的视图中,如果没有,我可以清除这些坐标(不确定这是否有必要)。

这是一种糟糕的做法吗?有更好的方法吗?我宁愿不进入核心数据,因为我已经像避免瘟疫一样避免它,而且这似乎很简单,不需要它。

有什么想法可以让它变得更好吗?

【问题讨论】:

  • 我看不出用户默认设置与此有什么关系。为什么不使用变量?这就是它们的用途,即保存数据。
  • 因为如果用户退出应用程序并返回,如果我只使用一个变量,无论用户将其拖动到何处,视图都将被绘制回其原始位置。我需要保存用户拖动视图的位置信息。
  • 我在你的问题中没有看到这个概念。我错过了什么吗?
  • 不管当前的讨论已经在 cmets 中进行,听起来它只是一小部分数据。那么,您担心将 then 放入用户默认值中是为了什么?好像你有使用用户默认值的想法是不好的,不应该被使用/误用? (但是少量的少量数据如何解释可能的滥用。如果是数千条数据或大量的大数据项,那么您就有滥用的理由)。如果您需要在应用程序存在/重新启动之间保留数据,只需将它们放在用户默认值中,如果没有,请使用 matt 所说的变量。
  • 我说我想在本地保存 x / y 坐标,而不是用 Firebase 保存它,这样当用户离开/回来时,位置仍然被保存。我的想法是通过 userdefaults 来实现,但这似乎很草率。可能只是一个措辞不佳的问题,我的错。

标签: ios swift uiview nsuserdefaults


【解决方案1】:

您已经基本描述了 macOS 如何保存窗口的位置。那里的功能称为“自动保存”。用户默认设置是放置这个的好地方。

我只为窗口映射一个属性,而不是两个。您可以使用NSValue(cgPoint:) 在用户默认值中轻松存储CGPoint。我可能会在属性名称上添加一些前缀(例如“windowPosition:”),而不仅仅是使用 UID,但这可能并不重要。您还可以将所有窗口位置存储在存储字典的单个属性中。真的,任何相当方便的东西。这或多或少是用户默认值的用途,尤其是在用户无法直接与它们交互的 iOS 中。在程序启动之间存储小块数据是它的重点。

【讨论】:

  • 非常感谢!消除了我的顾虑,并为我提供了更好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 2017-02-13
  • 2022-01-18
相关资源
最近更新 更多