如何检查UIManagedDocument是否为空

时间:2012-08-03 20:57:28

标签: objective-c ios

当打开UIManagedDocument实例时(文档状态是否正常?),如何检查UIManagedDocument是否为空?这里的“空”表示文档中根本没有实体。

或者我可以在它关闭时检查空虚吗?

if (self.photoDatabase.documentState == UIDocumentStateClosed) 
{ 
    [self.photoDatabase openWithCompletionHandler:^(BOOL success) {}];
    [self setupFetchedResultsController];  

    if ( // check if document is empty  )
        {  
            [self fetchFlickrDatatoDocument:self.photoDatabase]; 
        }
}

1 个答案:

答案 0 :(得分:1)

这里有几个答案......

首先,文档肯定是空的,你创建它。您只需查询文件系统以查看该文件是否存在。

如果它仍然是空的,你为什么要在第一时间创建它?

如果您习惯打开空数据库文件,那么您可以通过多种方式判断它是否为“空”,具体取决于“空”的含义。

执行提取以获取记录数。如果返回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还是在代码中创建模型?无论哪种方式,您已经告诉数据库它将包含的实体类型以及它们之间的关系。

当您最初创建数据库时,它已经知道所有实体(这就是托管对象模型的全部内容)。核心数据管理对象上下文需要一个持久存储,它需要一个托管对象模型。

因此,当核心数据堆栈被完全实例化时,它拥有所需的关于数据库中将包含哪些类型实体的所有知识。