在 userdefaults 中保存临时数据?

Saving temporary data in userdefaults?

我的屏幕上有基于 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 设置了 userdefault,否则请转到 firebase。

然后为了清理我的 userdefaults,我可以检查是否存在任何我将再次加载的视图的 UID,如果没有,我可以清除那些坐标(不确定是否有必要)。

这是一种糟糕的做法吗?有更好的方法吗?我宁愿不进入核心数据,因为我像躲避瘟疫一样避开它,这看起来很简单,不需要它。

有什么改进方法吗?

您基本上已经描述了 macOS 如何保存 windows 的位置。那里称为 "autosave." 用户默认值的功能是放置它的好地方。

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