【问题标题】:NSPredicateEditorRowTemplate, specifying of Key Path with spaces?NSPredicateEditorRowTemplate,用空格指定键路径?
【发布时间】:2011-05-09 22:10:42
【问题描述】:

根据前面的问题,我很不情愿地放弃了使用 IB/Xcode4 来编辑 NSPredicateEditor 并纯粹在代码中完成。

在编辑字段的 GUI 方式中,可以使用空格指定键路径,例如“字段名称”,这使它们可以作为“字段名称”样式的键路径,同时仍然使用空格在 UI 中显示它们。我如何在代码中做到这一点?当我用空格指定它们时,它们不起作用。当我在 camelCase 中指定它们时,它们可以工作但在 camelCase 中显示。我只是像这样添加一堆 NSExpressions:

[NSExpression expressionForKeyPath:@"original filename"]

【问题讨论】:

    标签: objective-c cocoa nspredicateeditor


    【解决方案1】:

    在谓词编辑器的行视图中获取人类可读字符串的正确方法是使用NSRuleEditorNSPredicateEditor 的本地化功能。

    如果您按照this blog post 中的说明进行操作,您将拥有本地化编辑器所需的一切。

    例如,假设您的密钥路径是 fileName,您支持 2 个运算符(iscontains),并且您希望用户输入一个字符串。你最终会得到一个如下所示的字符串文件:

    "%[fileName]@ %[is]@ %@" = "%1$[fileName]@ %2$[is]@ %3$@";
    "%[fileName]@ %[contains]@ %@" = "%1$[fileName]@ %2$[contains]@ %3$@";
    

    您可以使用此文件放入人类可读的内容,甚至重新排序:

    "%[fileName]@ %[is]@ %@" = "%1$[original filename]@ %2$[is]@ %3$@";
    "%[fileName]@ %[contains]@ %@" = "%3$@ %2$[is contained in]@ %1$[original filename]@";
    

    将字符串文件本地化后,将该文件交还给谓词编辑器,它会提取翻译后的值,发挥作用,一切都会正确显示。

    【讨论】:

      【解决方案2】:

      如果您不想本地化所有内容,只需映射关键路径,考虑在评估对象中覆盖 value(forKey:),如下所示:

      class Match: NSObject {
      
          var date: Date?
          var fileName: String?
      
          override func value(forKey key: String) -> Any? {
              // Alternatively use static dictionary for mapping key paths
              super.value(forKey: camelCasedKeyPath(forKey: key))
          }
      
          private func camelCasedKeyPath(forKey key: String) -> String {
              key.components(separatedBy: .whitespaces)
                  .enumerated()
                  .map { $0.offset > 0 ? $0.element.capitalized : $0.element.lowercased() }
                  .joined()
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-10
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        • 1970-01-01
        相关资源
        最近更新 更多