从核心数据中排序NSMutablearray时,我收到错误

时间:2014-03-03 18:46:19

标签: sorting ios7 nsmutablearray

下面是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]];
    }



}

1 个答案:

答案 0 :(得分:0)

阅读错误消息。它告诉你这个问题。您可以对不可变数组说sortUsingDescriptors:。这是不可改变的。

现在,至于做错了什么,它更有趣!你在说:

NSMutableArray *array = (NSMutableArray *)objects;

也许您相信这会将不可变数组转换为可变数组。它没有。你不能通过类型转换将丝绸钱包变成母猪的耳朵。您可能会欺骗编译器(并且您通过类型转换为假类),但您无法对运行时撒谎。无论你怎么称呼它,它的目标是什么,它是什么。

如果你想要一个可变数组,你必须制作一个可变数组(例如通过调用mutableCopy) - 它不足以事实上它是一个可变数组,实际上它不是。