【问题标题】:How can I sort an NSTableColumn of NSStrings ignoring "The " and "A "?如何排序 NSStrings 的 NSTableColumn 忽略“The”和“A”?
【发布时间】:2010-05-09 04:11:42
【问题描述】:

我正在开发一个简单的 Core Data 应用程序来显示我的电影收藏。我正在使用NSTableView,它的列通过NSArrayController 对象绑定到我的Core Data 存储的属性。此时,当单击列标题时,列排序良好(对于数值)。

我遇到的问题是字符串排序,它们排序,但是它以标准字符串方式完成,大写字母在小写之前(即 Z 在 a 之前)。除了让大小写排序正常工作之外,我还希望能够在对字符串进行排序时忽略“The”或“A”的前缀。

在 Objective-C/Cocoa 中解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: objective-c cocoa sorting core-data nstableview


    【解决方案1】:

    在 Interface Builder 中,您将每个表列的 Sort Key 字段设置为对应于您要应用于托管对象的 sortDescriptor。

    对于要忽略“A”和“the”的每一列,您必须在托管对象上创建一个额外的方法。如果您要排序的属性是title,则创建一个名为cleanedTitle 的新方法,它基本上采用[self title] 并去掉“a”和“the”。然后在 Interface Builder 中,告诉您的表列使用 cleanedTitle 排序键,而不是 title 排序键。

    【讨论】:

    • 我喜欢这个主意,非常聪明。我对 objc 和 cocoa 还是很陌生。我是否想要覆盖 NSMangedObject 的 -(void) setValue:(NSString *) forKey:(NSString *) 方法?如果是这样,我该怎么做?我是否只是编写一个扩展它的新类,并将其用作我的核心数据实体的类?谢谢。
    • David Barry:您将编写 NSManagedObject 的子类,并将其用作您的核心数据实体的类。 (所以,“扩展”部分是肯定的。)不要覆盖setValue:forKey:;添加一个名为cleanedTitle 的新方法,该方法从[self title] 派生其值。您还需要使该属性依赖于模型属性:developer.apple.com/mac/library/documentation/Cocoa/Reference/…:
    • 谢谢彼得,这听起来比覆盖 setValue: forKey:.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    相关资源
    最近更新 更多