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