2013-05-07 31 views
1
SELECT * FROM tbl_SyncEntries WHERE syncDataType == 1 AND 
syncLastSuccessOnDt == (SELECT max(syncLastSuccessOnDt) FROM tbl_SyncEntries 
WHERE syncDataType==1) 

如何爲上述SQL語句制定NSPredicate?NSPredicate子查詢

我想檢索記錄,其中syncDataType == 1和syncDataType 1同步的最近日期。

回答

1

核心數據,你會

  • 抓取對象,其中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; 
+0

感謝[request setFetchLimit:1]; – skartys 2013-05-19 13:24:52