NSDictionary с ключом => String и Value => c-Style массив - PullRequest
2 голосов
/ 17 апреля 2010

Мне нужен NSDictionary, который имеет ключ в виде строки (@"key1", @"key2") и значение в виде двумерного массива в стиле C (valueArray1,valueArray2), где valueArray1 определяется как:

int valueArray1[8][3] = { {25,10,65},{50,30,75},{60,45,80},{75,60,10}, {10,70,80},{90,30,80},{20,15,90},{20,20,15} };

И то же самое для valueArray2.

Моя цель - NSString, мне нужно получить соответствующий двумерный массив. Я предполагаю, что использование NSArray вместо массива c-style будет работать, но тогда я не могу инициализировать массивы, как сделано выше (у меня есть много таких массивов). Однако, если это выполнимо, пожалуйста, дайте мне знать, как.

В настоящее время следующее выдает предупреждение «Передача аргумента 1 для dictionaryWithObjectsAndKeys: 'из несовместимого типа указателя": NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:valueArray1,@"key1", valueArray2,@"key2",nil];

Ответы [ 2 ]

2 голосов
/ 17 апреля 2010

valueArray2 также int[][3]? Если это так, вы можете использовать

[NSValue valueWithPointer:valueArray1]

для преобразования массива в значение ObjC. Чтобы получить контент, вам нужно использовать

void* valuePtr = [[myDict objectForKey:@"key1"] pointerValue];
int(*valueArr)[3] = valuePtr;
// use valueArr as valueArrayX.

Если есть только 2 клавиши, более эффективно использовать такую ​​функцию, как

int(*getMyValueArr(NSString* key))[3] {
    if ([key isEqualToString:@"key1"]) return valueArray1;
    else return valueArray2;
}
0 голосов
/ 17 апреля 2010

Вместо добавления массива непосредственно в качестве значения в NSDictionary создайте пользовательский класс, в котором создайте переменную NSArray ... и установите для этого объекта класса значение, например

NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:MyClassObj1,@"key1",
                    MyClassObj2,@"key2",nil];

, где MyClassObj1 и MyClassObj2 являются членами MyClass

...