Zurück mit meiner täglichen dummen Frage. Heute versuche ich eine Struktur in ein NSArray zu bringen. In Ordnung, das ist einfach, wickle es in eine NSData. Wenn Sie mich kennen, wissen Sie, dass Sie Code sehen werden. In diesem Beispiel lade ich eine Eckpunktlinie von einem Wavefront OBJ in eine Struktur und halte sie in einem Array fest.Speichern einer Struktur in einem NSArray
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)]];
Das scheint gut zu funktionieren. Die ersten Objekte in der Ausgabe:
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>,
Wenn es darum geht, sie zu drucken, nachdem sie aus dem Array ziehen, nicht so sehr. Die problematischen Code:
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);
}
Natürlich ist die säumige Ausgabe:
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
Ich denke, das durch C wizardry verursacht wird, durch jemand versucht, die keine C-Assistenten ist, der Art wie Zauberlehrling. Ich denke, dies sollte für einen Zauberer des 99. Grades offensichtlich sein, oder wenn jemand einen moderneren Weg vorschlagen kann, lass es mich wissen.
Danke, Will