Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何对NSStrings的NSTableColumn进行排序,忽略“忽略”;";及;“A”吗;?_Objective C_Cocoa_Sorting_Core Data_Nstableview - Fatal编程技术网

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:更干净的解决方案。