2

構造体の多次元配列を NSValue にエンコードしようとしています。

これは構造体です:

typedef struct {
    float Position[3];
    float Color[4];
} Vertex;

const Vertex Vertices[] = {
    // Front
    {{1, -1, 0}, {1, 0, 0, 1}},
    {{1, 1, 0}, {1, 0, 0, 1}},
(etc...)

オブジェクト「ブロック」に格納するには、NSValue にエンコードする必要があります。

これは私が保存するために行うことです:

Block *newBlock = [[Block alloc] init];
newBlock.blockVertices = [NSValue value:&Vertices withObjCType:@encode(Vertex)];

そしてそれを取り戻すには:

Vertex tempVertices[24];
[newBlock.blockVertices getValue:&tempVertices];

すべてが正常に機能しているように見えるので、次のように値を比較してみます。

for (int i = 0; i < 24; i++){
    NSLog(@"%f = %f", Vertices[i].Position[0], tempVertices[i].Position[0]);
    NSLog(@"%f = %f", Vertices[i].Position[1], tempVertices[i].Position[1]);
    NSLog(@"%f = %f", Vertices[i].Position[2], tempVertices[i].Position[2]);
    NSLog(@" ");
}

そして、次のような奇妙な結果が得られます: -1.000000 = -1.998905

どこに問題がありますか?どんな助けでも大歓迎です。

4

1 に答える 1

3

エンコードされている構造体の数を伝える必要があります。次に例を示し@encodeます。Vertex

[NSValue value:&Vertices withObjCType:@encode(Vertex[24])];
于 2012-06-16T12:15:51.270 に答える