这里有几个答案...
首先,当您创建文档时,文档肯定是空的。您可以只查询文件系统以查看文件是否存在。
如果它仍然是空的,你为什么首先创建它?
如果您有打开空数据库文件的习惯,那么您可以通过多种方式判断它是否为“空”,具体取决于“空”的含义。
执行 fetch 以获取记录数。如果返回 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 还是在代码中创建模型?无论哪种方式,您已经告诉数据库它将包含的实体类型以及它们之间的关系。
当您最初创建数据库时,它已经知道所有实体(这就是托管对象模型的全部内容)。核心数据托管对象上下文需要一个持久存储,它需要一个托管对象模型。
因此,当核心数据堆栈完全实例化时,它就拥有了关于数据库中将包含哪些类型的实体所需的所有知识。