我已经初始化了NSMutableArray,并从sqlite数据库的AppDelegate.m中填充了NSString对象。现在,我在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
然后,我尝试在View Controller的-(void)viewDidLoad方法中,使用来自AppDelegate.m中来自NSMutableArray的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。
最佳答案
问题是您的未排序数组中有NSNull
个。实际上,您数组中的所有内容都必须实现选择器sortedArrayUsingSelector:
(几乎必须是字符串),因此您需要在调用localizedCaseInsensitiveCompare:
之前将其删除。您可以通过先遍历数组并调用[obj repsondsToSelector:@selector (localizedCaseInsensitiveCompare:]
来检查所有内容是否对选择器做出响应,如果所有不响应选择器的操作都将破坏排序方法。
关于ios - 在NSMutableArray中对NSString对象进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23323033/