Objective c 如何对NSStrings的NSTableColumn进行排序,忽略“忽略”;";及;“A”吗;?
我有一个简单的核心数据应用程序,我正在使用它来显示我的电影收藏。我使用的是Objective c 如何对NSStrings的NSTableColumn进行排序,忽略“忽略”;";及;“A”吗;?,objective-c,cocoa,sorting,core-data,nstableview,Objective C,Cocoa,Sorting,Core Data,Nstableview,我有一个简单的核心数据应用程序,我正在使用它来显示我的电影收藏。我使用的是NSTableView,它的列通过NSArrayController对象绑定到核心数据存储的属性。此时,当单击列标题时,列的排序很好(对于数值) 我遇到的问题是字符串排序,它们进行排序,但是它是以标准字符串方式进行的,大写字母在小写字母之前(即a之前的Z)。除了让案例排序正常工作之外,我希望在对字符串排序时能够忽略前缀“the”或“a” 在Objective-C/Cocoa中执行此操作的最佳方法是什么?在Interface
NSTableView
,它的列通过NSArrayController
对象绑定到核心数据存储的属性。此时,当单击列标题时,列的排序很好(对于数值)
我遇到的问题是字符串排序,它们进行排序,但是它是以标准字符串方式进行的,大写字母在小写字母之前(即a之前的Z)。除了让案例排序正常工作之外,我希望在对字符串排序时能够忽略前缀“the”或“a”
在Objective-C/Cocoa中执行此操作的最佳方法是什么?在Interface Builder中,您可以设置每个表列的
排序键
字段,以对应于要应用于托管对象的排序描述符
对于要忽略“A”和“the”的每一列,必须在托管对象上创建一个额外的方法。如果要排序的属性是
title
,则创建一个名为cleanedTitle
的新方法,该方法基本上采用[self title]
并去掉“a”和“the”。然后在Interface Builder中,告诉您的表列使用cleanedTitle
排序键,而不是title
排序键。在Interface Builder中,您可以将每个表列的排序键
字段设置为与要应用于托管对象的排序描述符相对应
对于要忽略“A”和“the”的每一列,必须在托管对象上创建一个额外的方法。如果要排序的属性是
title
,则创建一个名为cleanedTitle
的新方法,该方法基本上采用[self title]
并去掉“a”和“the”。然后在Interface Builder中,告诉表列使用cleanedTitle
排序键,而不是title
排序键。我喜欢这个主意,非常聪明。我对objc和cocoa还是相当陌生的。我是否希望覆盖nsMangeObject的-(void)setValue:(NSString*)forKey:(NSString*)方法?如果是的话,我会怎么做?我是否只需要编写一个新的类来扩展它,并将其用作我的核心数据实体的类?谢谢。David Barry:您可以编写NSManagedObject的子类,并将其用作核心数据实体的类。(因此,“扩展”部分是。)不要覆盖setValue:forKey:
;添加一个名为cleanedTitle
的新方法,该方法从[self title]
派生其值。您还需要使该属性依赖于model属性::谢谢peter,这听起来像是一个比覆盖setValue:forKey更干净的解决方案:。我喜欢这个想法,非常聪明。我对objc和cocoa还是相当陌生的。我是否希望覆盖nsMangeObject的-(void)setValue:(NSString*)forKey:(NSString*)方法?如果是的话,我会怎么做?我是否只需要编写一个新的类来扩展它,并将其用作我的核心数据实体的类?谢谢。David Barry:您可以编写NSManagedObject的子类,并将其用作核心数据实体的类。(因此,“扩展”部分是。)不要覆盖setValue:forKey:
;添加一个名为cleanedTitle
的新方法,该方法从[self title]
派生其值。您还需要使该属性依赖于model属性::谢谢peter,这听起来像是一个比覆盖setValue:forKey:更干净的解决方案。