CMMotionManager没有产生任何.deviceMotions。

8

我正在为我的公司开发一款AR应用程序,它在大多数设备上都能正常运行,但在十分之一的设备上(所有iPhone 4和4s,5.1.1+),却出现了问题。

当我们运行以下代码时:

CMDeviceMotion *d = motionManager.deviceMotion;

    if (d == nil && motionManager.deviceMotionActive && motionManager != nil) {
        DLog(@"Device motion is active, but no device motion recieved");
    }

我们在某些设备上会出现“设备运动处于活动状态,但未收到任何设备运动”的实心块,但这似乎是完全随机的。
如果为true,并且运动管理器存在,则.deviceMotion应返回一个CMDeviceMotion。但它只返回nil。
有人知道是什么原因导致的吗?这个检查正在我的...中运行。
- (void)onDisplayLink:(id)sender

有缺陷的设备可以在 iPhone 4 和 4s 中找到。 - Nils Munch
你尝试过检查对象内存分配/释放吗?也许这是问题所在。同时请检查此链接:http://iphonedevsdk.com/forum/iphone-sdk-development/103541-cmdevicemotion-flick-gesture.html - iCreative
当您使用基于块的方法时,是否遇到了相同的问题? - Jonathan
2个回答

6

经过一番探索,我们发现这是由于偶尔的硬件/固件错误引起的。最明智的做法是检查motionManager.deviceMotion是否为Nil,并且motionManager.deviceMotionActive是否为true。


1
真让人惊讶,又有苹果的漏洞了。很抱歉听到你在这上面浪费了那么多时间。 - jww
你是怎么解决这个问题的?我也遇到了同样的问题,不知道该怎么办。我检测到它并显示一个警告。有时使用内置指南针应用程序校准传感器会有帮助,但有时候不行... - shelll

-2

调用

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:someFrame];

或者

[motionManager startDeviceMotionUpdates];

通过读取deviceMotion属性开始更新并定期访问CMDeviceMotion对象的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接