NSPredicate 对自己返回 ANY
Posted
技术标签:
【中文标题】NSPredicate 对自己返回 ANY【英文标题】:NSPredicate to return ANY on self 【发布时间】:2013-06-25 04:56:28 【问题描述】:是否有返回任何单个现有 NSManagedObject
的方法(NSPredicate
或其他函数)。也可以是实体类型的计数。除了自我存在之外没有其他要求。
NSPredicate *fetch = [NSPredicate predicateWithFormat: "@ANY"]
....
[fetch setEntity:entityDescription];
[fetch setPredicate: predicate];
[fetch setFetchLimit:1];
请注意,这是“根”对象,因此在此引导阶段没有实例。
【问题讨论】:
【参考方案1】:我不确定我是否正确理解了您的问题,但要获得一个(任意)对象 您的实体只是不向获取请求添加谓词并将获取限制设置为 一:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"YourEntity"];
[request setFetchLimit:1];
NSError *error;
NSArray *result = [context executeFetchRequest:request error:&error];
if (result == nil)
// Error executing fetch request
else if ([result count] == 0)
// Found none
else
// Found one
NSManagedObject *obj = result[0];
【讨论】:
就是这样。干杯。为了这个简单的目的,总是使用 nsarraycontroller 或 nsobjectcontroller。【参考方案2】:几年后我遇到了这个问题,并认为在 Swift 中看到它可能会有所帮助。在我的测试中,这将返回数据存储中的第一个条目,不一定是整个存储中的随机条目,甚至每次都返回不同的条目。
假设通过“ANY”你可以简单地返回第一个条目,这里是如何在 Swift 中做到这一点。
对于 Swift 4.2:
let fetchRequest : NSFetchRequest<yourEntityName> = yourEntityName.fetchRequest()
fetchRequest.fetchLimit = 1
do
let fetchResults = try managedContext.fetch(fetchRequest)
if fetchResults.count == 0
// found none
else
// found one
var obj: NSManagedObject = fetchResults[0]
catch let error as NSError
print("Could not fetch \(error), \(error.userInfo)")
【讨论】:
以上是关于NSPredicate 对自己返回 ANY的主要内容,如果未能解决你的问题,请参考以下文章
CloudKit,NSPredicate在私有容器中返回计数或确定是否存在任何记录?