XLForm谓词用于NSDate比较

时间:2015-12-04 16:34:44

标签: objective-c nsdate nspredicate xlform

我正在使用内联datePicker来选择日期(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行)

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

以下是@catch块中的NSException描述:

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

感谢您的帮助\ o

1 个答案:

答案 0 :(得分:2)

通过绕过问题,我找到了一个能够完成这项工作的解决方案。

我重写了方法

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

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

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