Ray Wenderlich SDSyncEngine と SDAFParseAPIClient を使用するアプリがありますが、クライアントの Web サービスを使用するように変更しました。フェッチ リクエストを作成するとき、文字列を使用して GET に追加し、updatedAt 日付以降のレコードのみをダウンロードするように指定します。ここに記録します:
-[SDAFParseAPIClient GETRequestForAllRecordsOfClass:updatedAfterDate:] [Line 69] jsonString = {"updatedAt":{"$gte":{"__type":"Date","iso":"1900-01-01T00:00:00.999Z"}}}
-[SDAFParseAPIClient GETRequestForClass:parameters:] [Line 54] request <NSMutableURLRequest http://myserver.com/api_address_which_returns_XML_JSON?where=%7B%22updatedAt%22%3A%7B%22%24gte%22%3A%7B%22__type%22%3A%22Date%22%2C%22iso%22%3A%221900-01-01T00%3A00%3A00.999Z%22%7D%7D%7D>
その文字列は、次のメソッドによって生成されます。
- (NSMutableURLRequest *)GETRequestForAllRecordsOfClass:(NSString *)className updatedAfterDate:(NSDate *)updatedDate {
NSMutableURLRequest *request = nil;
NSDictionary *paramters = nil;
if (updatedDate) {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.'999Z'"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSString *jsonString = [NSString
stringWithFormat:@"{\"updatedAt\":{\"$gte\":{\"__type\":\"Date\",\"iso\":\"%@\"}}}",
[dateFormatter stringFromDate:updatedDate]];
NSLog(@"jsonString = %@", jsonString);
paramters = [NSDictionary dictionaryWithObject:jsonString forKey:@"where"];
}
request = [self GETRequestForClass:className parameters:paramters];
return request;
}
これはもともとチュートリアルからのものです。私の Web サービスは、辞書内で iso 形式の日付を使用しません。そこで、コードを次のように変更しました。
NSString *jsonString = [NSString stringWithFormat:@"{\"updatedAt\":%@}",
[dateFormatter stringFromDate:updatedDate]];
そしてこれを得ました:
jsonString = {"updatedAt":1900-01-01T00:00:00.999Z}
しかし、何らかの理由で機能していないため、毎回 Web サービスからすべてのレコードを取得しています。