繁体   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