2012-01-12 2 views
3

Я Тринг для заполнения сборщика из словаря, и у меня есть словарьПолучение значения как для того, что они добавляют NSDictionary

NSMutableArray* type1names = [NSMutableArray arrayWithObjects:@"--",@"AA",@"AB",@"BA",@"BB",@"BC",@"CB",@"CC",@"CD",@"DC",@"DD",@"FF",nil]; 
    NSMutableArray* type1points = [NSMutableArray arrayWithObjects:@"-",@"4",@"3.7",@"3.3",@"3.0",@"2.7",@"2.3",@"2.0",@"1.7",@"1.3",@"1",@"0", nil]; 
    NSMutableDictionary *type1 = [[NSMutableDictionary alloc] initWithObjects:type1points forKeys:type1names]; 

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

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    YOHAppDelegate *app = [UIApplication sharedApplication].delegate; 

    NSString *key = [[app.pointsDictionary allKeys] objectAtIndex:row]; 
    return key; 
} 

Они возвращаются из словаря неупорядоченным. Не случайно, всегда в одних и тех же позициях, но без какой-либо логической системы.

Есть ли способ реализовать это, или я должен использовать несколько массивов для этого?

ответ

3

A Hot Licks said, NSDictionary не сохраняет заказ. Однако Matt Gallagher shows how to create an OrderedDictionary путем подкласса NSMutableDictionary.

С другой стороны, вы должны серьезно относиться к его предупреждению. Но определенный способ, он подклассифицирует его, дает нам шаблон, который можно использовать без подкласса: вы можете определить класс, содержащий словарь и массив, но наследуемый от NSObject. Определите метод setObjectForKey:, который перейдет в NSDictionary и добавит объект в массив (просто, если он не был в словаре). Добавьте метод objectForKey:, который переместит в словарь и objectAtIndex:, который перейдет в массив.

2

NSDictionary не имеет (извне определяется/документирован) для своих элементов. Если вы хотите, чтобы они заказали вам, вам нужна другая схема.

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

  • Нет связанных вопросов^_^