从 iOS 客户端谓词问题查询 Azure 同步表?
Posted
技术标签:
【中文标题】从 iOS 客户端谓词问题查询 Azure 同步表?【英文标题】:Querying Azure synctable from iOS client predicate issue? 【发布时间】:2016-01-20 17:33:59 【问题描述】:我在 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 服务中收到错误发现运算符类型“GreaterThanOrEqual”的操作数类型“Edm.DateTimeOffset”和“Edm.String”。
这里是微软提供的示例代码。在提供的链接中查找以下方法。
-(void)pullData:(QSCompletionBlock)完成
https://azure.microsoft.com/en-in/documentation/articles/mobile-services-ios-get-started-offline-data/
【问题讨论】:
【参考方案1】:您的日期格式似乎有问题。尝试使用 Fiddler 或 Postman 等 REST 客户端发送查询,并根据您在客户端上的查询进行检查。
请注意,此更新后的查询与增量同步不兼容。因此,您需要为查询键(pullData 的第一个参数)传递 nil。
【讨论】:
所以你的意思是我的谓词是正确的但日期格式是错误的?我已经尝试使用静态日期,因为它会说“ERROR Error Domain=com.Microsoft.. Code=-1400”不支持谓词。”此外,在 pullData 方法中,我们必须传递 queryId,例如它会获取所有数据而不管增量同步。增量同步的 queryId 是多少。[self.syncTable pullWithQuery:query queryId:@"allTodoItems" completion:^(NSError *error) [self logErrorIfNotNil:error]; ]; 如果您使用查询 ID,那么您正在使用增量同步。任何字符串都可以用作查询 ID。有关日期查询的示例,请参阅 MSQuery 测试:github.com/Azure/azure-mobile-services/blob/master/test/iOS/…【参考方案2】:您应该使用 NSDate 作为您的 NSPredicate 的参数(如果您的数据是 DateTimeOffset,则使用 MSDateOffset):
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(updatedAt>= %@)", twoDaysAgo];
Azure 移动 SDK 中的谓词解析器将使用您的参数数据类型来创建正确的查询字符串。
如果你的数据类型是 DateTimeOffset 类型:
MSDateOffset *offset = [MSDateOffset date:twoDaysAgo];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(updatedAt>= %@)", offset];
【讨论】:
以上是关于从 iOS 客户端谓词问题查询 Azure 同步表?的主要内容,如果未能解决你的问题,请参考以下文章
如何异步执行 Azure 表存储查询?客户端版本 4.0.1