【问题标题】:XLForm predicate for NSDate comparison用于 NSDate 比较的 XLForm 谓词
【发布时间】:2015-12-04 16:34:44
【问题描述】:

我正在使用内联 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 行)处停止执行

在哪里: self 是实际的行, _hidden 等于 "$birthday.value >= CAST(881190000.000000, "NSDate")" 并且 self.sectionDescriptor.formDescriptor.allRowsByTag 为 nil,因为 self.sectionDescriptor 也为 nil

这里是 @catch 块中 NSException 的描述:

无法在绑定 {} 中获取“生日”的值。

感谢您的帮助\o

【问题讨论】:

    标签: objective-c nsdate nspredicate xlform


    【解决方案1】:

    通过绕过问题,我找到了完成工作的解决方案。

    我重写了方法

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多