在NSMutableArray中排序NSString对象

时间:2014-04-27 11:49:29

标签: ios objective-c sorting nsmutablearray unrecognized-selector

我已经使用sqlite数据库中的AppDelegate.m中的NSString对象初始化并填充了NSMutableArray。现在我在我的View Controller中设置了AppDelegate:

appDelegate = (IBUAppDelegate *)[[UIApplication sharedApplication] delegate];

所以我可以像这样访问我的NSMutableArray对象:

[appDelegate.myNonSortedArray objectAtIndex:row];

现在我已经在我的View Controller的@interface部分创建了一个NSMutable数组,所以我可以使用来自AppDelegate.m的NSMutableArray的已排序的NSString对象填充它。

@interface IBULanguageViewController ()
{
    IBUAppDelegate *appDelegate;
    NSMutableArray *myArraySorted;
}
@end

然后我尝试使用来自我的视图控制器中的 - (void)viewDidLoad方法中来自AppDelegate.m的NSMutableArray的排序NSStrings填充myArraySorted,因此我可以在表视图控制器中创建单元格期间访问已排序的数组。

- (void)viewDidLoad
{
    [super viewDidLoad];
    appDelegate = (IBUAppDelegate *)[[UIApplication sharedApplication] delegate];
    myArraySorted = [[NSMutableArray alloc] init];

    [myArraySorted addObjectsFromArray:[appDelegate.myNonSortedArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]];
}

我得 [NSNull localizedCaseInsensitiveCompare:]:无法识别的选择器发送到实例0x1a51068

1 个答案:

答案 0 :(得分:1)

问题是你的未排序数组中有NSNull个。你需要在调用sortedArrayUsingSelector:之前删除它们,实际上数组中的所有内容都必须实现选择器localizedCaseInsensitiveCompare:(几乎必须是一个字符串)。您可以通过首先遍历数组来检查所有内容是否响应选择器,并且调用[obj repsondsToSelector:@selector (localizedCaseInsensitiveCompare:]任何对此不响应的内容都会破坏排序方法。