下面是tableViewController中的viewDidLoad方法。当viewDidLoad运行时,出现此错误
2014-03-03 12:44:54.904 SalesCRM2 [30188:70b] - [_ PFArray sortUsingDescriptors:]:无法识别的选择器发送到实例0x8c45710 2014-03-03 12:44:54.931 SalesCRM2 [30188:70b] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [_ PFArray sortUsingDescriptors:]:无法识别的选择器发送到实例0x8c45710 “
在这行代码上
[array sortUsingDescriptors:[NSArray arrayWithObject:sort]];
这是整个方法
- (void)viewDidLoad
{
[super viewDidLoad];
JCAppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context =
[appDelegate managedObjectContext];
NSEntityDescription *entityDesc =
[NSEntityDescription entityForName:@"Customers"
inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesc];
NSError *error;
NSArray *objects = [context executeFetchRequest:request
error:&error];
NSMutableArray *array = (NSMutableArray *)objects;
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES];
[array sortUsingDescriptors:[NSArray arrayWithObject:sort]];
if ([objects count] == 0)
{
//_isEmpty = YES;
}
else
{
//_isEmpty = NO;
_resultsArray = (NSMutableArray *)objects;
NSLog(@"resultsArray: %i",[_resultsArray count]);
// matches = objects[0];
// _address.text = [matches valueForKey:@"address"];
// _phone.text = [matches valueForKey:@"phone"];
// _status.text = [NSString stringWithFormat:
// @"%lu matches found", (unsigned long)[objects count]];
}
}
答案 0 :(得分:0)
阅读错误消息。它告诉你这个问题。您可以对不可变数组说sortUsingDescriptors:
。这是不可改变的。
现在,至于你做错了什么,它更有趣!你在说:
NSMutableArray *array = (NSMutableArray *)objects;
也许您相信这会将不可变数组转换为可变数组。它没有。你不能通过类型转换将丝绸钱包变成母猪的耳朵。您可能会欺骗编译器(并且您通过类型转换为假类),但您无法对运行时撒谎。无论你怎么称呼它,它的目标是什么,它是什么。
如果你想要一个可变数组,你必须制作一个可变数组(例如通过调用mutableCopy
) - 它不足以说事实上它是一个可变数组,实际上它不是。