从 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 表实体存在/同步

如何异步执行 Azure 表存储查询?客户端版本 4.0.1

用于查询Azure Active Directory的Azure服务

AZURE 表存储、ODATA 和更友好的 URI 查询

如何从 azure 表存储中编写组合查询?

从 Azure Databricks 查询 SAP 表