最強大的方法是使您的自定義對象成爲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'而不是方便的方法。 –