Кодировать 2D-массив в Objective-c - PullRequest
0 голосов
/ 06 марта 2012

У меня есть пользовательский объект с двумя двумерными массивами следующим образом:

float a[5][5];
float b[5][10];

И я хочу закодировать этот объект:

- (void)encodeWithCoder:(NSCoder *)coder
{
    // Encode a
    // Encode b
}

Как я могу кодировать и декодировать эти двумерные массивы?Я не мог найти подходящий метод для этой операции.Заранее спасибо,

Ответы [ 3 ]

3 голосов
/ 06 марта 2012

Вы можете создать структуру с такими параметрами:

typedef struct myStruct {

    float a[5][5];
    float b[5][10];

}MyStruct;

Затем используйте NSValue для кодирования их как объектов.

MyStruct i;
memset(&i, 0, sizeof(i));
//Set values on struct

NSValue *v = [NSValue valueWithBytes:&i objCType:@encode(MyStruct)];

Теперь вы можете обрабатывать свою структуру как объект и использоватьзатем с NSArrays и т. д.

Чтобы прочитать значения, которые вы можете использовать:

MyStruct i;

[v getValue:&i];

Я сделал это так, чтобы работать с потоками и устаревшими серверами, и это работало гладко.

Надеюсь, это поможет.

1 голос
/ 06 марта 2012

Для этого не существует готового метода - вам нужно написать его самостоятельно.Простейшим способом было бы написать два int сначала для количества строк и количества столбцов, а затем записать все R*C элементов по одному.

Декодирование одинаково просто - прочитайте двацелые числа для R и C, а затем запустить два вложенных цикла, читая float s.

Определите две вспомогательные функции для этого, чтобы избежать двойного копирования одного и того же кода.

1 голос
/ 06 марта 2012

Вставьте их в объективы-контейнеры для процесса кодирования / декодирования.

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