2011-09-19 47 views
1

我一直在試圖確定一種優雅的方式來處理在iOS上使用CoreData來實現設計,類似於處理多個文檔。在iOS上使用CoreData來處理類似多個文檔文檔

作爲背景,我有一個培訓應用程序,我希望支持應用程序內購買培訓課程。這些文件可能是一組包含.sqlite和一些支持媒體文件的文件,這些文件在下載後會在App Library文件夾中的CourseName子文件夾中結束。

我希望能夠支持在我的應用程序的根級別的表中列出所有Coursenames,並根據用戶選擇哪一個進行切換。

我的直覺是我可以將Store切換到合適的sqlite。

NSString *sqliteFileForCourseName = [self sqliteFileForCourseName]; 
    storeURL = [[self applicationLibraryDirectory] URLByAppendingPathComponent:sqliteFileForCourseName]; 
    if(!__persistentStoreCoordinator) 
     __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) 
    // handle error 

我認爲這將是一個管理[persistentStoreCoordinator persistentStores]中的項目的問題。

我不確定這是否是正確的級別(多個Persistent Stores)來處理該功能,或者它是否可以在NSManagedObjectContext級別完成。

我可以與課程是隻讀的,當他們從庫文件夾加載,如果它簡化了事情有一個可寫的商店和多個只讀存儲生活(也許NSInMemoryStoreType?)

回答

0

如果你正在做的是處理文件列表然後NSArrayNSUserDefaults可能是你最好的選擇。這在技術上不太令人印象深刻,但最簡單的解決方案通常是最簡單的。

至於每個文檔,我不會打擾一個sqlite數據庫,除非你真的有很多數據要讀取。我會去一個以.json文件,對於該文件提供的信息檔案即

index.json

{ 
    "name":"Document 1", 
    "author":"Bob Smith" 
    "pages":[ 
     { "title":"Title", "path":"title.html" }, 
     { "title":"Contents", "path":"contents.html" }, 
     { "title":"1", "path":"contents/1.html" } 
    ] 
} 

其中每個頁面是一個HTML文件(或任何你想要的格式),它的位置是在文檔的json描述中指定。

只需製作一個實現NSCoding的Document對象 - 從上面的JSON創建它並將其存儲在NSUserDefaults中。

然後,在啓動時,只需使用標題作爲UITableViewCell中的文本填充從NSUserDefaults讀入的數組中的UITableView即可。


但是,sqlite可能有一個合理的理由 - 是否有任何特別複雜的,你打算做的文件?

+0

感謝您的回覆。我的應用程序已經在使用CoreData編寫和閱讀sqlite。因此,生成包含sqlite和支持媒體文件的Bundle非常簡單。我試圖找到阻力最小(或最少編碼)在這些Bundle中的sqlite文件之間切換的路徑。 –

+0

啊,我的回答並沒有太大的幫助呢!抱歉!我不會嘗試同時加載所有的商店,我不知道這將如何工作:(每次用戶選擇文檔時,我都會創建一個新的持久存儲區。但是,沒有理由說明爲什麼該方法你建議在你的問題不會工作:) – deanWombourne

0

將這些作爲持久存儲管理看起來完全正確。這就是他們所設計的。你無法在MOC層面真正控制這一點。一個邏輯「文檔」可以有許多MOC。在大多數情況下,每個線程都需要一個單獨的MOC。分開這些東西的正確位置是在持久性商店。