Как создать NSDictionary с двумя значениями на ключ из plist - PullRequest
0 голосов
/ 22 июля 2010

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

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

Ответы [ 2 ]

1 голос
/ 22 июля 2010

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

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

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


Для хранения значения ключ-значение у вас есть 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 - это стандартные типы для хранения структурированных значений. Это легко сериализуемо к списку.
  • Минусы - массивы и словарь слишком гибкие.
0 голосов
/ 22 июля 2010

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

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

[NSString stringWithFormat:@"%d"numericConstant]

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

Конвертируйте его обратно в int при извлечении из словаря

[stringConstant intValue]
...