2014-11-23 44 views
0

我們的應用程序使用CoreData處理和使用我們的應用程序中的數據很多。 現在我想讓這個過程更穩定。我們的系統問題始於iOS 7,似乎在iOS 8上更爲廣泛。所以我正在尋找一些重構。我們有很多用戶,我使用BugTracker進行崩潰分析。使用CoreData有CoreDataController像蘋果在他們的例子提出良好實施的CoreData技巧

Object's persistent store is not reachable from this NSManagedObjectContext's coordinator 
--- 
Attempt to allocate 1048576 bytes for NS/CFData failed 
--- 
SIGSEGV 

林:IM看到,因爲我們使用CoreData的這些的很多。有2個用於背景和主要的管理對象上下文。

這是由SharedInstance控制器發起..

是否有任何框架或頁面有更多的崩潰證明CoreData例子。所以要清楚的是,它爲我們的系統運行了100,000個用戶,但受影響的所有用戶中最多的崩潰(15%)正在經歷CoreData操作的崩潰。那麼我怎麼能消除他們最好的?

+0

只是猜測,你是否將大文件存儲在CoreData中?如果是這樣,避免這樣做,而是將大文件存儲在本地文件系統中,然後將文件URL保存在CoreData中。 – John 2014-11-23 12:42:02

回答

0

正如你可能已經知道CoreData本身不是線程安全的。因此,如果您在不同的線程上使用數據庫,則可能需要更多地關注數據庫堆棧。 在個人經驗中,我認爲3層核心數據棧更適合大型應用程序。 (見:http://www.cocoanetics.com/2012/07/multi-context-coredata/,http://floriankugler.com/blog/2013/4/2/the-concurrent-core-data-stack)。

有了這種架構,您幾乎可以確定您的託管對象上下文沒有任何可怕的事情發生。

此外,它可能會有幫助有一個類,執行另一個子管理對象上下文的每個表上執行保存。這樣你的保存和提取就不會互相攔截。