Core data NSPredicate子查询

Core data NSPredicate子查询,core-data,nspredicate,Core Data,Nspredicate,如何为上述SQL语句制定NSPredicate 我想检索记录,其中syncDataType==1和syncDataType 1同步的最近日期。对于核心数据,您需要 获取对象,其中syncDataType==1 按syncLastSuccessOnDt降序排序,以及 将结果集限制为1 因此,您需要的是NSFetchRequest。(NSPredicate只是 获取请求。) 如果已为实体创建了托管对象子类SyncEntry,则最后一部分可以 写成 NSManagedObjectContext *

如何为上述SQL语句制定NSPredicate


我想检索记录,其中syncDataType==1和syncDataType 1同步的最近日期。

对于核心数据,您需要

  • 获取对象,其中
    syncDataType==1
  • syncLastSuccessOnDt
    降序排序,以及
  • 将结果集限制为1
因此,您需要的是
NSFetchRequest
。(NSPredicate只是 获取请求。)

如果已为实体创建了托管对象子类
SyncEntry
,则最后一部分可以 写成

NSManagedObjectContext *context = your managed object context
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SyncEntry"];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"syncDataType = %d", 1];
[request setPredicate:predicate];

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"syncLastSuccessOnDt" ascending:NO];
[request setSortDescriptors:@[sort]];

[request setFetchLimit:1];

NSError *error;
NSArray *results = [context executeFetchRequest:request error:&error];
if (results == nil) {
    // Error
} else if ([results count] == 0) {
    // Nothing found
} else {
    NSManagedObject *obj = results[0];
    NSDate *lastSync = [obj valueForKey:@"syncLastSuccessOnDt"];
}

有了核心数据,您将

  • 获取对象,其中
    syncDataType==1
  • syncLastSuccessOnDt
    降序排序,以及
  • 将结果集限制为1
因此,您需要的是
NSFetchRequest
。(NSPredicate只是 获取请求。)

如果已为实体创建了托管对象子类
SyncEntry
,则最后一部分可以 写成

NSManagedObjectContext *context = your managed object context
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SyncEntry"];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"syncDataType = %d", 1];
[request setPredicate:predicate];

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"syncLastSuccessOnDt" ascending:NO];
[request setSortDescriptors:@[sort]];

[request setFetchLimit:1];

NSError *error;
NSArray *results = [context executeFetchRequest:request error:&error];
if (results == nil) {
    // Error
} else if ([results count] == 0) {
    // Nothing found
} else {
    NSManagedObject *obj = results[0];
    NSDate *lastSync = [obj valueForKey:@"syncLastSuccessOnDt"];
}

感谢[request setFetchLimit:1];感谢[request setFetchLimit:1];
SyncEntry *obj = results[0];
NSDate *lastSync = obj.syncLastSuccessOnDt;