iPhone Motion – EXC BAD ACCESS

Я начинаю кодирование с помощью класса DeviceMotion. После того, как Apple объявила о намерении, у меня есть следующее:

- (void)viewDidLoad { [super viewDidLoad]; myMM = [[CMMotionManager alloc] init]; myMM.deviceMotionUpdateInterval = 1.0/30.0; theQ = [[NSOperationQueue currentQueue] retain]; motionHandler = ^ (CMDeviceMotion *motionData, NSError *error) { if (motionData.rotationRate.z > 5.5 || motionData.rotationRate.z < -5.5) { NSLog(@"Rotation of Z."); // Reference A } }; -(IBAction)toggleClick{ NSLog(@"toggle"); if(myMM.gyroAvailable){ if(myMM.deviceMotionActive){ NSLog(@"Stopping Motion Updates.."); [myMM stopDeviceMotionUpdates]; } else { NSLog(@"Starting Motion Updates.."); [myMM startDeviceMotionUpdatesToQueue:theQ withHandler:motionHandler]; } } else { NSLog(@"No motion available. Quit!"); } 

Этот код работает отлично, однако, когда я хочу сделать какой-либо код, кроме NSLog (даже что-то такое же простое, как приращение целого) вместо «ссылки A», я получаю EXEC Bad Access в консоли.

Я осмотрелся, и все, что я нашел, это то, что это утечка памяти. Кто-нибудь знает, что происходит? Если нет, то как я могу это понять? Я довольно неопытен с Инструментами, но если я укажу в правильном направлении, я буду очень благодарен.

EXC_BAD_ACCESS – это исключение на уровне ОС, означающее, что вы пытаетесь получить доступ к памяти, которая не принадлежит вам. Я думаю, что это связано с тем, что ваш блок является локальным для области, поэтому, когда он выходит из сферы действия, он уничтожается. Вам нужно создать копию ее в куче.

Попробуйте этот ответ от известного Дейва ДеЛонга. Кроме того, как и при нормальных правилах управления памятью Cocoa, не забудьте release их, если вы сделали копию.

Например:

 motionHandler = Block_copy(^ (CMDeviceMotion *motionData, NSError *error) { if (motionData.rotationRate.z > 5.5 || motionData.rotationRate.z < -5.5) { NSLog(@"Rotation of Z."); // Reference A } }); // and then later: - (void) dealloc { [motionHandler release]; //and all others. [super dealloc]; } 
  • iOS: принимать несколько типов объектов в качестве объекта paramenter (id)?
  • Проблемы с включением файлов заголовков
  • Как вы переименовываете сцену по умолчанию в шаблоне iOS SpriteKit?
  • Проект XCode с использованием cocoapods внезапно сломался из-за отсутствия дуги для arm64
  • Нечеткие страницы UIScrollView составляют большую нагрузку на пиксель?
  • Твердый синий прямоугольник на XCode Tab Bar View Контроллеры, которые не исчезнут?
  • Нет архитектур для компиляции для (ARCHS =, VALID_ARCHS = armv7 armv7s)
  • Добавление ограничений для создания изображений на 1/4 размера экрана
  • Swift: словарь с множеством предметов
  • как я могу обновить универсальное приложение ios7 для xcode 6 универсального приложения для раскадровки?
  • Не удается найти CFBundleSupportedPlatforms. Ошибка загрузки в App Store
  • Давайте будем гением компьютера.