NSPredicate返回任何自我

时间:2013-06-25 04:56:28

标签: core-data nspredicate nsmanagedobject

是否有方法(NSPredicate或其他函数)返回任何单个现有NSManagedObject。也可以是实体类型的计数。除了仅存在于自我之外,没有其他要求。

NSPredicate *fetch = [NSPredicate predicateWithFormat: "@ANY"]

....
[fetch setEntity:entityDescription];
[fetch setPredicate: predicate];
[fetch setFetchLimit:1];

请注意,这是“根”对象,因此在此启动阶段没有实例。

2 个答案:

答案 0 :(得分:2)

我不确定我是否正确理解你的问题,但是要获得一个(任意)对象 您的实体只是不添加谓词到获取请求并将获取限制设置为 之一:

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];
}

答案 1 :(得分:1)

几年后,我遇到了这个问题,并认为在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)")
    }