1
SELECT * FROM tbl_SyncEntries WHERE syncDataType == 1 AND 
syncLastSuccessOnDt == (SELECT max(syncLastSuccessOnDt) FROM tbl_SyncEntries 
WHERE syncDataType==1)

如何为上面的 SQL 语句制定一个 NSPredicate?

我想检索记录,syncDataType == 1同步同步数据类型 1 的位置和最近日期。

4

1 回答 1

1

使用 Core Data,您将

  • 获取对象,syncDataType == 1其中
  • 降序排序syncLastSuccessOnDt,和
  • 将结果集限制为 1。

所以你需要的是NSFetchRequest. (NSPredicate只是获取请求的一个参数。)

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

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

SyncEntry *obj = results[0];
NSDate *lastSync = obj.syncLastSuccessOnDt;
于 2013-05-07T12:01:38.953 回答