用于 NSDate 比较的 XLForm 谓词

XLForm predicate for NSDate comparison

我正在使用内联日期选择器 select 日期 (dd/mm/yyyy)。这是一个生日,如果日期小于 [NSDate date] 减去 18 年,我必须显示一个表格行。

而且我完全在为显示或隐藏行的谓词而苦苦挣扎 :x

如果用户未满 18 岁,这是我用来设置需要隐藏的行的代码

XLFormRowDescriptor *row = [XLFormRowDescriptor formRowDescriptorWithTag:kAuthorization rowType:MyXLFormDescriptionTypeCheck title:@"Parents authorization"]];

row.hidden = [NSString stringWithFormat:@"$%@.value >= CAST(%f, 'NSDate')", kDateOfBirth, [eighteenYearsAgo timeIntervalSince1970]];

[section addFormRow:row];

当我 运行 我的应用程序时,断点在 XLFormRowDescriptor.m 处停止执行(第 342 行)

其中: self 是实际的行, _hidden 等于“$birthday.value >= CAST(881190000.000000, "NSDate")” self.sectionDescriptor.formDescriptor.allRowsByTag 为 nil 因为 self.sectionDescriptor 也为 nil

这是 @catch 块中 NSException 的描述:

无法在绑定 {} 中获取 'birthday' 的值。

感谢您的帮助\o

我找到了解决问题的方法,绕过了这个问题。

我覆盖了方法

- [id<XLFormDescriptorDelegate> formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)formRow oldValue:(id)oldValue newValue:(id)newValue];

这样当行的值发生变化时我会收到通知。我只是在这里做比较,然后根据结果隐藏或显示我想要的行。

如果有人遇到同样的问题,我认为这个解决方案很棒,设置起来不费时(不需要 NSPredicate 或正则表达式技能,只需要一种方法来覆盖),而且不是很脏(代码可读, 解决方案也不是什么大招) :)