具体来说,如果一个对象可以转换为unix时间戳,我想将其转换为unix时间戳.这是我可以覆盖ruby用于将其转换为API的unix时间戳的标准日期/时间JSON格式(因为我们不想解析字符串电话端).而且,我有点想这样做,所以我可以在任何使用日期/时间的对象中使用它(通过修改as_json的结果).
好像我目前要处理Date,Time,DateTime(由Date进行类型检查处理)和ActiveSupport :: TimeWithZone(来自Rails).但是,不想要检查所有这些.
有更好的方法吗?
仅供参考,我试过检查respond_to?(:to_datetime),这是不好的,因为String响应了那个.并且respond_to?(:year)这是不好的,因为FixedNum会对此作出回应.:-P
作为参考,我正在尝试解决的问题是有效地查找和删除可能包含大量条目的表中的重复项.
我正在使用的表名为PersistedDay,其中包含一个dayString对象(它是一个字符串.:-P).有更多列与此问题无关.我想找到任何有重复的PersistedDay.
在SQL中,这是您可以这样做的有效方法之一(仅供参考,我可以在CoreData支持SQLite DB上执行此查询):
SELECT ZDAYSTRING FROM ZPERSISTEDDAY GROUP BY ZDAYSTRING HAVING COUNT(ZDAYSTRING) > 1;
Run Code Online (Sandbox Code Playgroud)
这只返回具有重复项的dayStrings,然后您可以通过使用生成的日期字符串查询来获取这些对象的所有字段(您可以将其用作子查询以在一个请求中完成所有操作).
NSFetchRequest似乎也拥有所有必需的部分,但它似乎没有用.这是我试图做的事情:
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"PersistedDay" inManagedObjectContext:context];
[request setEntity:entity];
NSPropertyDescription* dayStringProperty = entity.propertiesByName[@"dayString"];
request.propertiesToFetch = @[dayStringProperty];
request.propertiesToGroupBy = @[dayStringProperty];
request.havingPredicate = [NSPredicate predicateWithFormat: @"dayString.@count > 1"];
request.resultType = NSDictionaryResultType;
NSArray *results = [context executeFetchRequest:request error:NULL];
Run Code Online (Sandbox Code Playgroud)
这不起作用.:-P如果我尝试在尝试进行提取时遇到错误"不支持的函数表达式计数:(dayString)".我不认为"dayString.@ count"中的dayString甚至在上面的代码中都很重要......但是,为了清楚起见,我把它放进去(SQL计数只对分组的行进行操作).
所以,我的问题是:这是可能的,如果是这样,它的语法是什么?我在CoreData文档中找不到任何指示如何执行此操作的内容.
我发现了一个类似的SO帖子,我现在很遗憾地再找不到那个关于在一个条款中运行计数(我不认为有一个组).但是,海报放弃了,并在找不到解决方案之后采取了不同的方式.我希望这更明确,所以也许有人有答案.:)
作为参考,这就是我现在正在做的事情,它可以工作,但需要返回几乎所有的行,因为在大多数情况下几乎没有重复:
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity …
Run Code Online (Sandbox Code Playgroud)