Как создать NSDictionary с двумя значениями на ключ из plist

У меня есть зависимый UIPicker, который загружает значения в свои два компонента из списка. Это NSDictionary с NSArrays строками. Пользователь выбирает пару компонентов, и средство выбора отправляет эти две строки обратно делегату. Что мне действительно нужно, так это постоянство, которое согласуется с каждым индивидуальным выбором. Например, первый компонент - это A, B, C, и каждый вариант имеет три подвыбора A1, A2, A3 и т. Д. Пользователь выбирает ChoiceA с ChoiceA3, и средство выбора возвращает две строки нормально, но у меня есть числовая константа, которая связана с A-A3, и это то, что мне действительно нужно для математики в моей программе.

Могу ли я иметь две вещи, связанные с конкретным ключом - строку И число? Я думаю, что мне нужна пара (тройка) "ключ-значение"? Похоже, что использование логики в моей программе для присвоения значения на основе возвращенной пары «ключ-значение» в первую очередь сводит на нет цель использования списка.


person Steve    schedule 22.07.2010    source источник
comment
вы можете объединить две строки и вставить _ между ними?   -  person neoneye    schedule 22.07.2010


Ответы (2)


Идеальная структура - это действительно словарь словарей.

A = {
  A1 = 36;
  A2 = 42;
  A3 = 89;
};
B = {
  B1 = 64;
  ...

Plist - это просто (набор) формат сериализации. Я не понимаю, как это побеждено.


У вас есть 2 варианта хранения пары "ключ-значение-значение".

(1) Создайте новый курс.

@interface StringNumberPair : NSObject {
  NSString* strval;
  int intval;
}
@property(copy) NSString* strval;
@property(assign) int intval;
-(id)initWithString:(NSString*)strval_ integer:(int)intval_;
@end
...

[theDict setObject:[[[StringNumberPair alloc] initWithString:@"string"
                                                     integer:42] autorelease]
            forKey:@"key"];
  • Pro - Понятный интерфейс.
  • Минусы - нужно писать много кода.

(2) Сделайте значение массивом:

[theDict setObject:[NSArray arrayWithObjects:
                            @"string", [NSNumber numberWithInt:42], nil]
            forKey:@"key"];

или словарь:

[theDict setObject:[NSDictionary dictionaryWithObjectsAndKeys:
                      @"string",                   @"strval",
                      [NSNumber numberWithInt:42], @"intval",
                      nil]
            forKey:@"key"];
  • Pro - это стандартные типы для хранения структурированных значений. Его легко сериализовать в список.
  • Минусы - массивы и словарь слишком гибкие.
person kennytm    schedule 22.07.2010
comment
Думаю, мне нравится идея использовать NSArray для значений. Мне потребуется некоторое время, чтобы понять, как сделать первое из двух значений (NSString) вторым компонентом средства выбора ... Спасибо и следите за обновлениями. - person Steve; 22.07.2010
comment
Я решил использовать объект для моих данных. Он называется Chemical на основе NSOBject, и у меня есть четыре свойства, 2 строки, 1 float и один BOOL. Теперь уловка заключается в загрузке словаря химическими веществами. Не уверен, где в моем коде было бы правильное место ... - person Steve; 24.07.2010

Вы сказали, что ваше значение - это массив строк, верно?

Таким образом, вы можете преобразовать числовую константу в строку

[NSString stringWithFormat:@"%d"numericConstant]

и добавьте его в массив.

Преобразуйте его обратно в int, когда вы получите его из словаря

[stringConstant intValue]
person Swapnil Luktuke    schedule 22.07.2010