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在私有容器中返回计数或确定是否存在任何记录?

NSPredicate 与 NSCompoundPredicate?

NSPredicate 返回空数组

NSPredicate - 返回不精确的匹配

NSPredicate 返回重复值

带有 NSPredicate 的 NSFetchRequest 不返回任何结果