从iOS客户端谓词问题查询Azure是否可以同步?

时间:2016-01-20 17:33:59

标签: ios azure azure-mobile-services

我在azure pulltoquery方法中使用同步表的日期属性谓词进行同步。要求仅在过去2天内获得物品。

NSDate *now = [NSDate date];
NSDate *twoDaysAgo = [now dateByAddingTimeInterval:-2*24*60*60];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSString *toString = [dateFormatter stringFromDate:twoDaysAgo];
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"(updatedAt>= %@)",toString]; 

但我从azure服务中得到错误找到操作数类型'Edm.DateTimeOffset'和'Edm.String'用于运算符类型'GreaterThanOrEqual'。

这里是microsoft提供的示例代码。在提供的链接中查找以下方法。

- (无效)pullData:(QSCompletionBlock)完成

https://azure.microsoft.com/en-in/documentation/articles/mobile-services-ios-get-started-offline-data/

2 个答案:

答案 0 :(得分:0)

您的日期格式设置似乎有问题。尝试使用像Fiddler或Postman这样的REST客户端发送查询,并根据客户端上的查询进行检查。

请注意,此更新的查询与增量同步不兼容。因此,您需要为查询键传递nil(第一个参数为pullData)。

答案 1 :(得分:0)

您应该使用NSDate作为NSPredicate的参数(如果数据是DateTimeOffset,则使用MSDateOffset):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(updatedAt>= %@)", twoDaysAgo];

Azure Mobile SDK中的谓词解析器将使用参数数据类型来创建正确的查询字符串。

如果您的数据类型是DateTimeOffset类型:

MSDateOffset *offset = [MSDateOffset date:twoDaysAgo];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(updatedAt>= %@)", offset];