5St*_*yan 2 xcode core-data objective-c plist ios
我一直在阅读保存对象,保存状态等,但在保存从我的应用程序创建的对象时,我仍然会对我应该采取的路线感到困惑.我已经构建了一个应用程序,用户可以使用类型,名称和频率创建一个无线电台.一旦用户点击保存,就会使用自定义类创建"RadioStation"对象,并将其存储在放置在RootViewController中的NSMutableArray中.虽然RadioStation对象可以存储在此数组中并在表视图中正确显示,但很明显,一旦应用程序退出,应用程序将不再保留这些对象.
在这一点上,我不确定如何开始设计这个设计.我需要设置一个plist吗?我应该将Core Data与SQLite DB一起使用吗?我是否需要针对这两种情况研究iOS对象序列化?还是有一种我不知道的更直接的方式?
有三种方法可以在本地保存数据:
如何保留对象数据取决于您使用它的方式以及您要保存的数据类型.如果你有很多相同类型的对象,并且SQL的搜索和排序机制会很有用,那么CoreData是有意义的.我倾向于将沙盒用于非常大的文件,例如图像,声音文件以及通过NSData反弹的大量数据.我将UserDefaults用于可能被视为"首选项"的少量数据.
你可以在任何你想要的地方放置任何东西,我建议你在开始一个新项目时熟悉这三种机制.其他技术(如使用NSCoding序列化和反序列化类)可用于简化数据保存.请注意,一旦实施了NSCoding,您就可以将数据存储在任何地方,甚至可以通过网络发送数据.
对于您的RadioStation,我个人会使用UserDefaults.使用NSCoding的好处是,一旦实现了initWithCoder和encodeWithCoder,就可以非常轻松地流式传输对象层次结构(例如,自定义对象数组,每个对象可能包含字典,数组或自定义对象等).如果您保存的唯一内容是字符串数组,那么直接使用UserDefaults就足够了.
最强大的方法是使您的自定义对象成为其子类NSManagedObject,并将其存储在NSManagedObjectContext使用Core Data中.在iOS上,这将总是使用sqlite数据库,在Mac OS X上,您可以使用sqlite,xml或专有的二进制格式(比xml更小/更快).
根据您的数据结构的复杂程度以及将来更改的可能性,此技术可能会对您的应用程序造成太复杂的影响.设置需要做很多工作,并且API非常复杂,但如果您需要在文件中存储数万/数百万个对象,它是最佳选择.
对于您的应用程序,我将有一个包含应用程序中所有无线电台的sqlite文件.
最简单的选择是NSCoding在自定义对象的类中实现协议.记录在这里:
基本理论是您的对象将所有数据写入或读取到"编码器",然后将编码器传递给任何子对象.在课堂之外,你使用"archiver"或"unarchiver"类来协调一切.
一旦您的自定义类实现,NSCoding您可以使用以下命令将其读/写到磁盘:
myObject = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
[NSKeyedArchiver archiveRootObject:myObject toFile:filePath];
Run Code Online (Sandbox Code Playgroud)
这是一种非常简单的方法,但它有一些缺点,例如,您需要找出自己的方式来支持不同版本的文件格式(例如,可能使用不同的文件扩展名).
许多类可可/ CocoaTouch已经实现了NSCoding,这样他们就可以被写入到一个文件以这种方式(包括NSArray,NSString,NSNumber等).
对于您的应用程序,我会使用它将每个广播电台存储在一个文件中.应用程序启动时,从目录中加载所有无线电台.您应该考虑为您的应用启用iTunes拖放文件共享,以便用户可以轻松地与朋友或设备之间共享广播电台文件.
这也适合与iCloud在设备之间进行同步,我没有太多关注iCloud,但我希望每个广播电台的一个文件将是实现iCloud同步的理想方式.
| 归档时间: |
|
| 查看次数: |
13923 次 |
| 最近记录: |