Хранение структуры в NSArray

Назад с моим ежедневным глупым вопросом. Сегодня я пытаюсь поместить структуру в NSArray. Хорошо, это легко, перенесите его в NSData. Если Вы знаете меня, Вы знаете, что собираетесь видеть код. В этом примере я загружаю строку вершины из Волнового фронта Объект в структуру и засовываю его в массив.

        NSArray *verticeLineParts = [currentLine componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        Coordinate c = CoordinateMake([[verticeLineParts objectAtIndex:1] floatValue],
                                      [[verticeLineParts objectAtIndex:2] floatValue],
                                      [[verticeLineParts objectAtIndex:3] floatValue]);
        [vertices addObject:[[NSData alloc] initWithBytes:&c length:sizeof(c)]];

Это, кажется, хорошо работает. Первые несколько объектов в выводе:

2010-10-18 14:18:08.237 ObjLoader[3778:207] (
    <5d1613bd 13f3da3f 8ac745bd>,
    <f04c28bd 13f3da3f d88048bd>,
    <649427bd d61ddb3f d88048bd>,
    <477625bd d845db3f d88048bd>,
    <4c1722bd 1668db3f d88048bd>,

Когда дело доходит до распечатывания их после получения по запросу их от массива, не так. Незаконный код:

for (int i = 0; i < [vertices count]; i++) {
    Coordinate c;
    fillCoordinateFromData(c, [vertices objectAtIndex:i]);
    NSLog(@"%@", CoordinateToNSString(c));
}

[snip]

void fillCoordinateFromData(Coordinate c, NSData *d) {
    void *bytes = malloc(12);
    [d getBytes:bytes];
    memcpy((void *)&c, &bytes, 12);
    free(bytes);
}

Конечно, оскорбление произвело:

2010-10-18 14:22:00.692 ObjLoader[3825:207] 9.885923, -6.837428, 0.000000
2010-10-18 14:22:00.693 ObjLoader[3825:207] 9.885923, -6.837428, 0.000000
2010-10-18 14:22:00.694 ObjLoader[3825:207] 9.885923, -6.837428, 0.000000
2010-10-18 14:22:00.695 ObjLoader[3825:207] 9.885923, -6.837428, 0.000000
2010-10-18 14:22:00.695 ObjLoader[3825:207] 9.885923, -6.837428, 0.000000

Я думаю, что это вызывается колдовством C, предпринятым кем-то, кто не мастер C, отчасти как Ученик Волшебника. Я думаю, что это должно быть очевидно для мастера 99-го градуса, или если кто-то может предложить более современный способ сделать это, сообщить мне.

Спасибо, будет

5
задан wjl 18 October 2010 в 19:24
поделиться