заполнить NSMutableArray значениями акселерометра? - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть вопрос, касающийся NSMutableArray, и это alloc / init как глобальная вещь.

Что я хочу сделать: заполнить NSMutableArray значениями ускорения, если бинарная переменная «разрешение» установлена ​​в значение «истина».Кроме того, я хочу остановить запись в массиве, когда я установил разрешение на false, а затем записать массив в файл, который я отправил по электронной почте с телефона.Я программировал весь день (возможно, я не самый опытный программист) и исправил множество проблем, таких как настройка разрешений, ни один файл во вложении (это был ноль, tadaaa), используя этот форум, но для этой конкретной проблемы я не могу найтирешение.

Дело в том, что вложение равно нулю, и я не могу придумать решение.

Я делаю следующее в начале файла .m:

    BOOL permission = NO; // key variable to enter recording / not recording state
    int i = 0; //used to determine place in dataArray
    NSMutableArray *dataArray; // axis values get dumped in here 

Чтобы начать запись,

    - (void)recordStart { //setting permission to yes
            permission = YES;
       }

это позволяет акселерометру: UIAccelerometer заполнять dataArray:

    (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

if (permission == YES) {

 //   NSLog(@"%f"@"%f"@"%f",acceleration.x,acceleration.y,acceleration.z);
    NSString *valueString = [NSString stringWithFormat:@"%f, %f,       
    %f",acceleration.x,acceleration.y,acceleration.z];

    [dataArray addObject:valueString];

   // NSLog(@"%i",i);
    NSLog(@"Array Count: %d", [dataArray count]);


}

}

NSLog всегда возвращает 0, поэтомумассив пуст, и метод stop не может записать массив в файл, потому что он равен nil:

    - (void)recordStop { //setting permission to no

NSLog(@"Array Count: %d", [dataArray count]);

[[dataArray componentsJoinedByString:@",\n"] writeToFile:[self setFileLocation] atomically:YES encoding:NSUTF8StringEncoding error:NULL];

// код пропущен

Нужно ли размещать массив где-то еще?тогда в глобальном масштабе? Я не могу сделать это в акселерометре: функция, потому что он будет просто делать это каждый раз, когда он срабатывает (я установил частоту 100 Гц)

Любые предложения?

ТНХ!

1 Ответ

0 голосов
/ 20 сентября 2011

Ваша проблема маленькая, но важная.Вначале вы сделали

NSMutableArray *dataArray;

для инициализации вашего изменяемого массива.Проблема в том, что это только делает некоторое пространство в оперативной памяти для объекта, а не инициализирует его.Итак, вы не инициализировали объект, поэтому он равен нулю.Вот правильный путь:

NSMutableArray *dataArray = [[NSMutableArray alloc] init];

Измените это, скомпилируйте и запустите, и оно должно работать.

...