[英]How to check if UIManagedDocument is empty
打開UIManagedDocument實例時(文檔狀態正常嗎?),如何檢查UIManagedDocument是否為空? “空”在這里表示文檔中根本沒有實體。
還是可以在關閉時檢查空度?
if (self.photoDatabase.documentState == UIDocumentStateClosed)
{
[self.photoDatabase openWithCompletionHandler:^(BOOL success) {}];
[self setupFetchedResultsController];
if ( // check if document is empty )
{
[self fetchFlickrDatatoDocument:self.photoDatabase];
}
}
這里有幾個答案...
首先,您創建的文檔肯定是空的。 您可以只查詢文件系統以查看文件是否存在。
如果它仍然為空,那么為什么要首先創建它?
如果您習慣於打開空的數據庫文件,則可以根據“空”的含義以多種方式判斷它是否為“空”。
執行獲取以獲取記錄計數。 如果返回0,則數據庫為空。
對保留有關數據庫元數據的“特殊”實體執行獲取。 如果不存在,則數據庫為空。
編輯
要檢查並查看是否沒有實體,只需詢問數量即可。
NSFetchRequest fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
NSError *error = nil;
NSUInteger count = [managedObjectContext countForFetchRequest:fetchRequest error:&error];
if (count == NSNotFound) {
// Handle error
} else if (count == 0) {
// The document is empty, i.e., has no entities of this type
} else {
// The document contains <count> entities.
}
或者,您可以只獲取一個實體...
NSFetchRequest fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
fetchRequest.fetchLimit = 1;
NSError *error = nil;
NSArray *objects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (objects == nil) {
// Handle error
} else if (objects.count == 0) {
// The document is empty, i.e., has no entities of this type
} else {
// The document contains at least one entity.
}
編輯
抱歉,菲利普,但最后一條評論對我來說沒有意義。 假設數據庫完全具有某種實體類型,那么如何讓數據庫告訴我它具有多少個實體。
就像孩子的紙牌游戲:
我:喲,數據庫,您有四分嗎? CoreData:去釣魚。
現在,我對您的評論的最佳猜測是,您正在將數據庫模型與數據庫記錄混淆。
創建數據庫時,您為其提供了一個模型。 您是使用GUI還是用代碼創建了模型? 無論哪種方式,您都已經告知數據庫它將包含的實體類型以及它們之間的關系。
最初創建數據庫時,它已經知道所有實體(這就是托管對象模型的全部內容)。 核心數據托管對象上下文需要一個持久存儲,該持久存儲需要一個托管對象模型。
因此,當核心數據棧被完全實例化時,它具有數據庫中實體類型的所有知識。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.