Sorting objective-c自定义排序

Sorting objective-c自定义排序,sorting,objective-c-2.0,Sorting,Objective C 2.0,所以,在没有太多文档的情况下,我已经为此挣扎了太长时间,我想我应该把我的经验分享给那些比我还没头脑的人。 可能有更干净的方法来实现我所做的,所以请随时提出改进建议 以下是我想做的: 我有一个NSArrayController,负责管理NSManagedObject所说的内容。这些对象具有NSString类型的name属性。 我想使用托管对象的名称对数组控制器的数组进行排序。对可变字符串数组进行排序的常用方法如下: [myMutableArrayOfStrings sortUsingSelecto

所以,在没有太多文档的情况下,我已经为此挣扎了太长时间,我想我应该把我的经验分享给那些比我还没头脑的人。 可能有更干净的方法来实现我所做的,所以请随时提出改进建议

以下是我想做的:

我有一个NSArrayController,负责管理NSManagedObject所说的内容。这些对象具有NSString类型的name属性。 我想使用托管对象的名称对数组控制器的数组进行排序。对可变字符串数组进行排序的常用方法如下:

[myMutableArrayOfStrings sortUsingSelector:@selector(caseInsensitiveCompare:)];
或:

但是,如果名称恰好是数字,那么caseInsensitiveCompare:会将11排在8之前。 此外,我希望a11b的名称在a8b之后排序,这意味着我需要将托管对象的名称分成数字和非数字字符组,然后分别比较它们

我想到的是,将NSString分类

头文件:

#import <Foundation/Foundation.h>

@interface NSString (MyString)

- (NSComparisonResult)myCustomCompare:(NSString *)anotherString;

@end
然后,在Thing ManagedObject的实现文件中,我重写

- (NSComparisonResult)compare:(Thing *)anotherThing {

return [self.name  myCustomCompare:anotherThing.name];

}
还需要在Thing类中导入MyString.h

现在,使用

[[myArrayController arrangedObjects] sortUsingSelector:@selector(compare:)];
工作起来很有魅力

有一件事一直困扰着我。如果一个事物的name属性包含十进制数,例如a1.4b和a1.39b,我如何能够将它们与名称隔离?a1.4b在a1.39b之前的排序不正确
更糟糕的是,用户可以输入一个东西的名称为1.3.55…

请在下次发布时对代码进行格式化。我现在已经修好了,但以后请你自己做。谢谢Richard,你刚刚击败了我:
- (NSComparisonResult)compare:(Thing *)anotherThing {

return [self.name  myCustomCompare:anotherThing.name];

}
[[myArrayController arrangedObjects] sortUsingSelector:@selector(compare:)];