11

我希望找到一种方法来检查 CoreData 属性是否为空。属性本身是二进制数据类型。如果该属性为空,那么我可以告诉我的班级下载并将一些数据保存到该属性中。

根据 CoreData 文档,您不应该继续获取以查看对象是否存在。我想知道是否有办法做到这一点?在不违反这条“法律”的情况下?

这是我第一次尝试使用 CoreData。之后我将它添加到我的代码中,这会稍微痛苦一些,但总的来说,到目前为止一切似乎都还不错。我只需要找出检查属性是否具有值的逻辑方法。如果不是,那么我需要下载并保存新数据,如果是,那么我只使用属性中的内容。

更新 :

我刚刚在我一直在阅读的 CoreData 框架中找到了这个方法,虽然试图对此有所突破。不知道它是否会有所帮助..你们怎么看?

willAccessValueForKey:提供对键值观察访问通知的支持。

  • (void)willAccessValueForKey:(NSString *)key 参数 key 接收者属性之一的名称。讨论 请参阅 didAccessValueForKey:了解更多详细信息。您可以使用键值 nil 调用此方法,以确保已触发错误,如下例所示。

[aManagedObject willAccessValueForKey:nil];

不确定..我不明白的是提供对键值观察访问通知的支持。???

4

1 回答 1

12

该通知用于何时访问该值。

如果我理解正确,您不想查看实体是否存在,而是要查看实体中的属性。因此,我假设您已将其标记为可选属性。

假设您有一个名为 rawData 的二进制数据属性。如果你想在数据库中找到所有没有为这个属性设置任何数据的@"MyEntity"对象,你可以发出这个获取请求。

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"rawData = nil"];
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:0];
于 2012-04-26T02:58:47.113 回答