2014-09-28 4 views
0

Добрый день, Я работаю над программой, которая включает использование UIPickerview. Это работало отлично, но вместо того, чтобы устанавливать массив в моем ViewdidLoad, я загружаю его с моего веб-сервера и сохраняю его в своем массиве. Кажется, работает нормально, но при звонке titleforRow на return _pickerData[row]; вы принимаете сообщение. [__NSCFString count]: unrecognized selector Я не уверен, почему, мне кажется, что я неправильно присваиваю значения _pickerData, но все известные методы, которые я пытался, терпят неудачу Хотелось бы, если бы мне помогли. СпасибоОшибка в UIPicker TitleforRow

Это мой код.

-(void)getMyItems:(NSArray *)items 
{ 
     /* This works 
     _pickerData = @[@"test"]; 
     [_uiPickerController reloadAllComponents]; 
     */ 
     /* This doesnt work 
    _pickerData = items; 
    [_uiPickerController reloadAllComponents]; 
    */ 


    for(int i=0;i<[items count];i++) 
    { 
    Details*bObject = [items objectAtIndex:i]; 
    if(bObject) 
    { 
     NSLog(@"list%@",[[items objectAtIndex:i]valueForKey:@"name"]);// This list all items in my array 
     _pickerData=[[items objectAtIndex:i]valueForKey:@"name"];//but it is not getting assigned to _pickData Array 

    } 

    } 


    [_uiPickerController reloadAllComponents]; //This gives error when run uncommented. 

} 

Update - ПУНКТЫ ARRAY

for (int i = 0; i < jsonArray.count; i++) 
    { 
     NSDictionary *jsonElement = jsonArray[i]; 


     Details*downloadobject = [[Detailsalloc] init]; 
     downloadobject .name = jsonElement[@"name"]; 



     [_transferArray addObject:downloadobject ]; (transfer array is an array 
    } 
if (self.delegate) 
    { 
     [self.delegate getMyItems:_transferArray ]; 
    } 

NSLog показывает

2014-09-28 01:07:05.002 progb[5647:a0b] list catapid 
2014-09-28 01:07:05.002 progb[5647:a0b] list metaphod 
2014-09-28 01:07:05.002 progb[5647:a0b] list butterfree 
2014-09-28 01:07:05.002 progb[5647:a0b] list beedrill 
2014-09-28 01:07:05.002 progb[5647:a0b] list genesect 
2014-09-28 01:07:05.002 progb[5647:a0b] list nincada 
2014-09-28 01:07:05.003 progb[5647:a0b] list ledian 
2014-09-28 01:07:05.003 progb[5647:a0b] list dustox 
2014-09-28 01:07:05.003 progb[5647:a0b] list shuckle 
+0

Что показывает ваш журнал - добавьте фактическую распечатку с одного прохода через цикл for. – rdelmar

+0

@rdelmar Я добавил его к основному вопросу –

ответ

0

Путь вы определяете ваш массив неверен. Вы определяете его как [[items objectAtIndex: i] valueForKey: @ "name"], который, как я предполагаю, является строкой, и в каждом проходе через цикл for вы переопределяете его как другую строку. Итак, когда ваш цикл выходит, _pickerData будет содержать последнюю строку, а не массив. Вы должны сделать _pickerData изменчивым массивом, создать экземпляр вне цикла, а затем добавить в него объекты в цикле for.

_pickerData = [NSMutableArray new]; 
for(Details *bObject in _items) { 
    [_pickerData addObject: [bObject valueForKey:@"name"]]; // You should be able to use bObject.name here instead of using valueForKey: if you import Details.h into this class 
} 
+0

, попробовав это сейчас –

+0

У меня, похоже, это не так. Я сделал _pickerData NSMutable в моем интерфейсе, тогда вы говорите, как я назначаю значения ему в цикле for, должен работать сейчас? во-вторых, даже до того, как я попытался использовать этот метод _pickerData = _items не работал для меня –

+0

@SleepParalysis, нет, это не то, что я сказал. Вам нужно создать экземпляр изменяемого массива вне цикла for, а затем использовать addObject: добавить каждую строку в цикле. – rdelmar

Смежные вопросы