gpt4 book ai didi

objective-c - 如何检查 UIManagedDocument 是否为空

转载 作者:行者123 更新时间:2023-11-29 04:30:30 25 4
gpt4 key购买 nike

当打开 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.
}

编辑

抱歉,菲利普,但最后一条评论对我来说没有意义。如何要求数据库告诉我它有多少特定实体类型的项目(假设它有任何项目)。

这就像 child 的纸牌游戏:

我:哟,数据库,你有四肢吗?CoreData:去钓鱼。

现在,我对您的评论的最佳猜测是您将数据库模型与数据库记录混淆了。

当您创建数据库时,您给了它一个模型。您是使用 GUI 还是代码创建了模型?无论哪种方式,您都已经告诉数据库它将包含的实体类型以及它们之间的关系。

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

因此,当核心数据堆栈完全实例化时,它就拥有有关数据库中实体类型的所有知识。

关于objective-c - 如何检查 UIManagedDocument 是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11803202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com