iOS - 存储供AppDelegate和其他View Controller使用的数据

时间:2015-08-09 16:57:30

标签: ios swift event-handling appdelegate data-storage

我正在处理一个记录用户并下载一些数据的应用程序,例如朋友,某些位置等。这是在登录屏幕后显示的自定义标签栏控制器中完成的,数据是存储在数组中。任何其他View Controller都可以引用该Tab Bar Controller来获取自己的数据副本。

我还在App Delegate中运行了一个事件监听器来更新一些用户数据,但我需要访问我在处理事件监听器时已经提取的用户数据。如果应用程序正在运行,因为Tab Bar Controller已经加载,我可以在App Delegate中发布通知并在Tab Bar Controller中处理它,但是当应用程序没有运行时,那么显然没有&# 39;处理通知的实例。

存储下载数据的最佳方法是什么,以便在关闭应用程序时使用,但事件处理程序可以访问它?我想到了核心数据,但它经常更新,所以看起来有点矫枉过正,但我​​之前从未这样做过,所以这可能就是答案..

经验的任何想法或教训都会很棒!

1 个答案:

答案 0 :(得分:1)

存储数据有几个选项。一种简单的方法是将数据直接存储在plist中的磁盘上。将数据添加到字典或数组中并使用以下代码保存:

//Read from file:
let documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let path = documents.stringByAppendingPathComponent("SavedFile")
if let yourData = NSDictionary(contentsOfFile: path) as? [String: AnyObject] { //Cast to correct type
    //Do stuff with the data
    }

//Write to disk:
let yourData = [String: AnyObject]() //Your data
let documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let path = documents.stringByAppendingPathComponent("FileToSave")
(yourData as NSDictionary).writeToFile(path, atomically: true)

使用plist非常适合小数据量,通常在您有一些自定义数据存储在磁盘上时。在你的情况下,这可能就足够了。

如果您有更多数据,那么Core Data是一个非常好的选择。 Core Data的一些好处是它可以管理很多幕后的混乱,并且与UITableViewController集成非常好。我不会在这里完整介绍核心数据,但简而言之,设置更多的工作,当您拥有相同格式的多组数据时,您将获得最大的好处(例如“新闻”对象包含标题,副标题,正文,图像等,重复多次)。使用Core Data存储一个用户的数据可能不是最佳的,但如果不确切知道要存储的数据,很难说。

另一种选择是将数据存储在NSUserDefaults中,但这主要用于设置和非常小的数据,而不是用户朋友列表等(但这是可能的)。

在不知道您的确切数据结构的情况下,很难肯定地说出一些内容,但根据描述,我会将磁带保存在磁盘上,如上面的代码所示,因为您已经拥有数组中的数据。