Хранение и извлечение структуры C в NSMutable Array - PullRequest
0 голосов
/ 25 августа 2010

У меня определена следующая структура C:

typedef struct {float x;плавать у;float z;} metric;

Я хочу сохранить точки акселерометра в массиве и что-то с этим сделать позже.

Итак, у меня есть изменяемый массив, который инициализируется следующим образом в моем методе viewDidLoad:

metricsArray_ = [[[NSMutableArray alloc] init] retain];

в моем didAccelerateметод я создаю структуру для хранения значений и добавляю ее в массив:

metric metricData;
metricData.x = acceleration.x;
metricData.y = acceleration.y;
metricData.z = acceleration.z;

NSValue *metricObject = [[NSValue valueWithBytes:&metricData objCType:@encode(struct metric)]retain];
[metricsArray_ addObject:metricObject];  

Позже, когда я прекращаю опрашивать данные, я пытаюсь перебрать массив и записать значения, но все значения равны нулю:

NSEnumerator * enumerator = [metricsArray_ objectEnumerator];
id element;
while(element = [enumerator nextObject])
{
    metric metricData;
    [element getValue:&metricData];
    NSLog(@"x=%f,y=%f,z=%f",metricData.x, metricData.y,metricData.z);
}

Что я здесь не так делаю?И есть ли лучший способ хранения точек данных акселерометра?Я хотел сохранить их в структуре, а не в объекте (хотя в конечном итоге вам все равно придется использовать NSValue)

Спасибо

Ответы [ 2 ]

1 голос
/ 25 августа 2010

Моя первоначальная мысль: зачем вам структура метрик, если вы просто используете ее для значений x / y / z.Для этого уже есть объект: UIAcceleration.

У меня есть игра, в которой экземпляры UIAcceleration хранятся в NSMutableArray примерно 60 раз в секунду, так как они получены в обратном вызове accelerometer:didAccelerate:.Нулевая производительность) * +1010 *

0 голосов
/ 25 августа 2010

Я даже не смог скомпилировать твой код выше. Мне пришлось внести следующие изменения, удалив структуру в @encode (). Тогда это, казалось, компилировалось и работало.

NSValue * metricObject = [NSValue valueWithBytes: & metricData objCType: @encode (metric)];

Там также, кажется, ненужное удержание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...