2012-02-13 2 views
2

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

- (void)startDeviceMotion { 
    motionManager = [[CMMotionManager alloc] init]; 
    motionManager.showsDeviceMovementDisplay = YES; 
    motionManager.deviceMotionUpdateInterval = 1.0/120.0; 
    [motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical]; 
} 

Во-вторых:

- (void)stopDeviceMotion { 
    [motionManager stopDeviceMotionUpdates]; 
    [motionManager release]; 
    motionManager = nil; 
} 

Они начали при запуске приложения и когда приложение заканчивает соответственно. Моя проблема теперь многозадачна. Если я получу свою проблему в фоновом режиме, а затем снова верну ее на передний план, я получаю сообщение (с активированным NSZombie), сообщим мне, что сообщение [CMMotionManager retain] отправляется на освобожденный экземпляр.

Где моя проблема?

Спасибо!

ответ

2

Попробуйте использовать Jonathan's suggestion here. В основном, чтобы убедиться, что создан только один экземпляр вашего CMMotionManager, поместите свой motionManager в AppDelegate и извлеките его с помощью этого метода, где бы вы ни захотели использовать свой motionManager.

-(CMMotionManager *)motionManager 
{ 
    CMMotionManager *motionManager = nil; 
    id appDelegate = [UIApplication sharedApplication].delegate; 
    if ([appDelegate respondsToSelector:@selector(motionManager)]) { 
    motionManager = [appDelegate motionManager]; 
} 
return motionManager; 
} 

Дайте мне знать, если это сработает для вас.

+0

Это абсолютно работа для меня! У меня такая же проблема. Это тратит много времени, чтобы исправить меня сегодня. Спасибо огромное! : D – Sakares

+0

Вас приветствуем. Простите за поздний ответ :) – Q8i

Смежные вопросы