2011-06-09 47 views
4

我正在使用CoreData構建iOS應用程序。少數我的用戶(大約1/1000)報告說,應用程序在啓動後不久崩潰。我懷疑持久性商店協調員無法將數據庫添加爲持久性商店。我一直無法重現測試中的任何錯誤,我無法從我的用戶那裏獲得任何調試信息。有誰知道這種方法產生的任何常見錯誤?iOS:NSPersistentStoreCoordinator addPersistentStoreWithType可能導致哪些錯誤:配置:URL:options:error:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 
    if (persistentStoreCoordinator_ != nil) return persistentStoreCoordinator_; 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"databasefile.sqlite"]; 

    NSError *error = nil; 

    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel]; 

    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 

    return persistentStoreCoordinator_; 
} 

回答

0

你可以看看Core Data Constants Reference但沒有任何調試數據,它不會對你有什麼好處。

我唯一能想到的檢查將是:(1)意外寫入或覆蓋代碼中其他地方的商店,例如:您打算通過複製來備份文件,但部分覆蓋它。 (2)更改文件的權限。

我在MacOS上看到過這兩種情況,但從未在iOS上看到過。該商店位於文檔文件夾中,並且具有非常通用的名稱,在iOS 4.x下,您可以在其上覆制文件。

由於您對持久性商店沒有做任何事情,所以我認爲這不太可能是導致崩潰的原因。如果您使用標準樣板代碼,則您正在討論經過高度測試和完善的內容。我會懷疑某種類型的資源,例如一個圖像或音頻文件,在我懷疑該商店之前的應用程序包中。

+1

謝謝@TechZen。你是對的,問題根本不是核心數據。我終於得到了用戶的崩潰報告,並且在分析xml文檔時主線程被阻塞。菜鳥的錯誤。 – Raider 2011-06-15 14:59:10

+0

@Raider,我遇到了同樣的問題:兩年內出現三次錯誤報告,沒有崩潰報告,以及必須是存儲加載失敗的結論。我花了很多時間來改進Core Data調用的錯誤處理,但也許我處在錯誤的軌道上。我不做任何xml解析,但是我在應用程序啓動時打開商店,所以可能有其他東西阻止了這些用戶。你能提供一些關於你的解決方案的更多細節嗎?這似乎是我學習一些東西的機會;) – 2012-03-18 10:32:35

0

我想你已經添加了新的屬性到實體,這就是爲什麼舊的.sqlite沒有得到與新的匹配。

解決方案:

如果你長了這樣的錯誤。「用開實體店的模式是用來創建存儲的一個不兼容」 然後只需刪除數據庫並創建一個新的或刪除應用程序並重新安裝。

如果我錯了,請讓我知道。