簡體   English   中英

如何檢查UIManagedDocument是否為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM