में एक स्ट्रक्चर संग्रह करना मेरे दैनिक मूर्ख प्रश्न के साथ वापस। आज मैं एक एनएसएआरएआरई में एक संरचना लगाने की कोशिश कर रहा हूं। ठीक है, यह आसान है, इसे एनएसडीटा में लपेटें। यदि आप मुझे जानते हैं, तो आप जानते हैं कि आप कोड देखने वाले हैं। इस उदाहरण में, मैं एक वेवफ़्रंट ओबीजे से एक स्ट्रेट में एक वर्टेक्स लाइन लोड कर रहा हूं और इसे एक सरणी में चिपका रहा हूं।एनएसएआरएआर
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
मुझे लगता है कि इस सी wizardry कोई है जो एक सी जादूगर नहीं है, एक तरह से जादूगर का अपरेंटिस की तरह करने की कोशिश के कारण होता है। मुझे लगता है कि यह 99 वें डिग्री के जादूगर के लिए स्पष्ट होना चाहिए, या अगर कोई ऐसा करने का एक और आधुनिक तरीका सुझा सकता है, तो मुझे बताएं।
धन्यवाद, विल