2014-12-09 2 views
-1

У меня есть следующий код, и я получаю странные ошибкиНевозможно добавить объект в массив

PFQuery *query = [PFQuery queryWithClassName:@"SchoolSpecificData"]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     NSMutableArray *data = [[NSMutableArray alloc]init]; 
     [data addObjectsFromArray:objects]; 

     NSLog(@"Objects: %d", data.count); 

     pickerData = [data valueForKey:@"schoolFullName"]; 
     NSLog(@"Picker data:%d",pickerData.count); 
     NSMutableArray *testarray =[NSMutableArray arrayWithObject:@"Other"]; 
     [pickerData addObjectsFromArray:testarray]; 

     NSLog(@"Picker data again:%d",pickerData.count); 
     self.SchoolPicker.dataSource = self; 
     self.SchoolPicker.delegate = self; 
    }]; 

Как вы можете видеть ранее в блоке I addedobjects на изменяемый массив и работал хорошо, но по какой-то причине он не работает с массивом pickerData. Этот массив является свойством моего класса и определяется как NSMutableArray. Любые идеи о том, почему это может произойти? Я также попытался просто добавить объект, но он дал ту же ошибку.

Здесь ошибка:

[2965:202451] -[__NSArrayI addObjectsFromArray:]: unrecognized selector sent to instance 0x7aee6360 
+0

Я не вижу сообщений об ошибках, выводах или описании того, что не удается. –

+0

Но, основываясь на том, что, по-видимому, является вашей общей проблемой, вероятность того, что вы 1) работаете на нулевом указателе, или 2) вам удалось создать два отдельных экземпляра «одного» объекта. –

+0

pickerData = [data valueForKey: @ "schoolFullName"]; Это не говорит о том, что pickerData является NSmutableArray. И без NSMutableArray, как вы можете добавлять/удалять любой элемент? –

ответ

0

Я думаю, что следующая строка является виновником

pickerData = [data valueForKey:@"schoolFullName"]; 

выше возвращается неизменяемый массив.

Попробуйте

pickerData = [[data valueForKey:@"schoolFullName"]mutableCopy]; 

Update

Похожие рефакторинга

PFQuery *query = [PFQuery queryWithClassName:@"SchoolSpecificData"]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     pickerData = [NSMutableArray array]; 
     //TODO: Need validations + capturing strong self inside block is a bad idea:) 
     [pickerData addObjectsFromArray:[objects valueForKey:@"schoolFullName"]]; 
     [pickerData addObject:@"Other"]; 
     //You can set the datasource & delegate outside the block & reload the picker once pickerData is filled. 
     self.SchoolPicker.dataSource = self; 
     self.SchoolPicker.delegate = self; 
    }]; 
+0

Или [data valueForKey: @ "schoolFullName"] может быть добавлено в pickerData, а также, я думаю, –

+0

Это исправляло проблему, спасибо! –

+0

@DebanjanChakraborty Да. В этом случае вам необходимо создать местоположение памяти заранее (перед добавлением значения) для pickerData. –

0

Я думаю, что это должно быть

[pickerData addObject:[data valueForKey:@"schoolFullName"]]; 

вместо

pickerData = [data valueForKey:@"schoolFullName"]; 
Смежные вопросы