Запись структуры в NSMutableArray - PullRequest
4 голосов
/ 31 января 2012

У меня есть игровой объект, который обрабатывается в двух совершенно разных местах.В Contact Listener я проверяю некоторые условия и, если они возникают, я должен сохранить одну или несколько частей сложных данных.Поэтому я решил использовать struct.Например:

struct SomeStruct
{
    int value1;
    int value2;
    CGPoint value3;
    b2Vec2 value4;
};

typedef SomeStruct SomeStruct;

В игровой сцене я просматриваю все игровые объекты и, если его стек / массив не пуст, делаю что-нибудь и стираю его.

В Contact Listener повторяется сначало.

Я должен использовать эту архитектуру из-за строгого порядка выполнения (метод должен вызываться после других методов).

Я подозреваю, что мне нужно что-то вроде vector или NSMutableArray (я так думаюне будет работать со struct), поэтому вектор может быть единственным способом.

Но не понимаю, как этого добиться.Можете ли вы помочь мне с некоторым кодом / псевдокодом или ссылкой на книгу / статью, где я могу найти решение?

Ответы [ 2 ]

3 голосов
/ 31 января 2012

Какао предоставляет NSValue класс для этой цели:

Это создает объект, который вы можете добавить к NSMutableArray:

NSValue *someObj = [NSValue valueWithBytes:&myStruct objCType:@encode(SomeStruct)];

Вы можете использовать [someObj pointerValue] для доступа кvoid* представляет адрес структуры, которую вы положили в NSValue.

2 голосов
/ 31 января 2012

Существует множество решений этой проблемы.

  1. Не используйте struct.Класс obj-c - это практически то же самое, что и структура.
  2. Используйте CFArray (CFArrayCreateMutable) и поместите его туда как указатель.
  3. Используйте класс C ++ с вектором STL.
  4. Используйте массив C (SomeStruct[]) и увеличивайте его длину, когда вам это нужно.
  5. Используйте классическую реализацию стека со связанным списком (каждая структура имеет указатель наследующее значение).
...