NSDictionary из P-списка с UIPickerView - PullRequest
1 голос
/ 14 января 2011

У меня проблема с моим сборщиком в одном из моих приложений.У меня есть NSDictionary, полученный из списка свойств, который содержит набор ключей, которые, в свою очередь, содержат набор строк.У меня есть два компонента, каждый из которых должен иметь одинаковый список строк.У меня также есть слайдер, который я хочу использовать, чтобы позволить пользователю менять ключи.Поэтому, когда значение ползунка изменяется от 0 до 1, ключ с индексом 1 в словаре должен загружать его содержимое в компоненты средства выбора.

Это работает так же, как загрузка нового содержимого в средство выбора на основе ползунка.Я использовал тег слайдера в качестве переменной, чтобы определить, какое содержимое будет загружено.Проблема в том, что после загрузки нового списка элементов происходит сбой программы, я думаю, что количество необходимых строк не обновляется или что-то в этом роде, но я просто недостаточно опытен с UIPickerView, чтобы самостоятельно изолировать проблему, не тратя большечасов, которые я уже использовал, пытаясь выяснить это сам.

Вот мои методы делегата / данных для сборщика:

#pragma mark -
#pragma mark Picker Delegate/Data Methods

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{

        //aryNames is an NSArray instance variable that contains the values for the components of the picker

    if (component == 0)
            return [self.aryNames count];
    return [self.aryNames count];
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row 
forComponent:(NSInteger)component
{
        //I think this is where my problem is
        //I'm using a string to select the object
        // at the index of the slider's location to 
        // fill up the instance variable with new data.

        //Anyway, it works fine if I have two different arrays hardcoded
        //but I'd really like to have this load dynamically because
        //there are a lot of keys and this way I could add and remove keys without
        //worrying about changing code

    NSString *selectedType = [self.aryKeys objectAtIndex:slideUnitTypes.tag];
    NSArray *newNames = [dictAllNames objectForKey:selectedType];
    self.aryNames = newNames;

    return [aryNames objectAtIndex:row];
}


//I'm pretty sure that the method below is not the problem

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:
(NSInteger)component
{
    if (component == 0) 
    { 
        [firstValueHeading setText:[aryNames objectAtIndex:row]]; 
    }
    else 
    { 
        [secondValueHeading setText:[aryNames objectAtIndex:row]]; 
    }
}

Если это не было достаточно описательным, или вам нужночтобы увидеть больше моего кода, пожалуйста, скажите мне.Эта проблема была серьезной ошибкой в ​​другом плавном проекте.Спасибо.

Ответы [ 2 ]

1 голос
/ 05 марта 2011

Я все еще довольно новичок в этом, но в книге Троя Бранта (глава 9) он делает это.Вы должны взять книгу из библиотеки / книжного магазина и просмотреть исходный код по адресу http://troybrant.net/iphonebook/chapter9/Ruralfork-done.zip

Это должно помочь.

0 голосов
/ 05 марта 2011

Я уже давно решил это.Вот код этого делегата, если он помогает:

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{ 
    NSUInteger index = slideUnitTypes.value;
    NSString *placeString = [self.aryKeys objectAtIndex:index];
    NSArray *returnThisArray = [dictAllNames objectForKey:placeString];

    return [returnThisArray objectAtIndex:row];
}

, если кому-то нужно увидеть кого-либо из моих других делегатов, просто прокомментируйте этот ответ и, надеюсь, ТАК отправит мне электронное письмо.

...