今天在使用ArcGIS for iOS中AGSDynamicMapServiceLayer的AGSLayerDefinition接口时遇到一个问题,对于字符串字段可以正常过滤,而对于日期类型的字段表达式没有出现预期结果,Xcode中不会有任何提示或报错。
也就是说在通过REST接口可以访问的where=TimeValue = date '11-16-2010 00:00:00'在ArcGIS for iOS中并不好使。
通过抓包工具Charles抓去请求比较发现,同样的请求,在iOS中却没有返回结果;
经过一番折腾也都没有实质性的结果。后来在涛哥的指引下,通过查看Server的日志找到了问题,非法表达式
可以看出,代码中definition的表达式中时间格式的冒号到了服务器端后竟然莫名的没有了,将日期设置为没有时间的形式就ok,可以确认问题就是出在这个冒号上了,
经过多次尝试转义、编码,都没有结果,后来有同事说用两个冒号试试,修改后definition=@"TimeValue = date '2010-11-16 00::00::00'";结果奇迹出现了。问题解决啦,太神奇啦!
总结下,在ArcGIS for iOS开发中使用日期类型的字段,我们需要完成以下操作,首先确保你的Server服务器端的系统日期格式和代码中的日期格式一致。
其次,请给代码中加上两个冒号,如TimeValue = date '2010-11-16 00::00::00