最强大的方法是使您的自定义对象成为NSManagedObject
的一个子类,并使用核心数据将其存储在NSManagedObjectContext
中。在iOS上,这将始终使用sqlite数据库,在Mac OS X上,您可以使用sqlite,xml或专有二进制格式(比xml更小/更快)。
根据数据结构的复杂程度以及未来可能发生的变化,这种技术可能对您的应用程序来说可能太复杂也可能不太复杂。设置需要很多工作,而且API非常复杂,但如果需要将数以万计/数百万个对象存储在文件中,则这是最佳选择。
对于您的应用程序,我会有一个包含应用程序中所有广播电台的sqlite文件。
最简单的选择是在自定义对象的类中实现NSCoding
协议。这里记载:
http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Archiving/Articles/codingobjects.html#//apple_ref/doc/uid/20000948-BCIHBJDE
的基本原理是你的对象写入或所有它的数据读取到一个“编码器”,然后传递到任何子对象(或多个)编码器。在课堂之外,您使用“存档器”或“解析器”类来协调一切。
一旦您的自定义类实现NSCoding
可以读/它写入磁盘:
myObject = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
[NSKeyedArchiver archiveRootObject:myObject toFile:filePath];
这是一个非常简单的方法,但它有一些缺点,比如你需要弄清楚您自己的方式来支持不同版本的文件格式(例如可能使用不同的文件扩展名)。
许多类可可/ CocoaTouch已经实现了NSCoding
,这样他们就可以以这种方式(包括NSArray
,NSString
,NSNumber
等)被写入到文件中。
对于你的应用程序,我会用它来存储每个电台在一个单一的文件。当应用程序启动时,从目录加载所有电台。您应该考虑为您的应用启用iTunes拖放文件共享功能,以便用户可以轻松地与他们的朋友或设备之间共享无线电台文件。
这也适合iCloud在设备之间进行同步,我还没有看过iCloud,但我希望每个电台的一个文件将是实现iCloud同步的理想方式。
我已经添加了两个答案,哪一个最适合你,可能取决于用户将在应用程序中拥有多少个电台。如果是10,我会用'NSCoding'去,如果它是5000,我会和Core Data一起去,但是如果它是50或100 ...那么它不太清楚哪个更好。 –
Plist文件和xml通常不会在iOS上使用。除非你压缩它们,否则它们被认为是浪费空间。但是压缩这些文件使得它们不必要的慢读/写。 –
@Abhi:在iOS上“没有真正使用”?谁说的?我一直都在使用它们。 :)如果您正在讨论实际的磁盘空间使用情况,那么它们是一个很好的低开销数据格式。它们可以以二进制格式存储。只需直接使用'NSPropertyListSerialization'而不是方便的方法。 –