我开发了针对iOS 4.3的应用。它工作正常。但是自从我迁移到iOS 5.0后,该应用程序开始出现奇怪的行为。位置管理员未显示位置变化的更新。有人遇到过这种问题吗?
感谢您的帮助。
答案 0 :(得分:4)
我与CLLocation经理分享了奇怪的更新问题 从iOS 4.x移动到5:
您是否已将CLLocationManager对象子类化?
问题: 在那种情况下某个时候委托方法 不要被叫(例如didUpdateLocation)。
修复:不要继承CLLocationManager
希望这有帮助:)
答案 1 :(得分:1)
iOS 5处理内存管理的方式可能是一种方式。如果您在.h文件中声明变量而没有正确或隐式地引用它[self.myVar doSomething];如果你不知道它,它可能会倾倒在你身上。它仍然可以正常编译,但主要会被忽略并传递。
如果没有看到代码,则不是100%,但是当iOS 5调用时,我已经注意到了这个问题以及我们公司的一些旧程序。祝你好运。
答案 2 :(得分:0)
核心位置框架中包含的关键类是 CLLocationManager和CLLocation。 CLLocationManager的一个实例 class在应用程序中创建,属性设置为指示 应用程序所需的位置准确性级别。 然后指示位置管理器开始跟踪位置 信息:
CLLocationManager *locationMgr =
[[CLLocationManager alloc] init];
locationMgr.desiredAccuracy = kCLLocationAccuracyBest;
locationMgr.delegate = self;
[locationMgr startUpdatingLocation];
每次更新位置时,都会命名一个应用程序委托方法 didUpdateToLocation由位置管理器调用并传递 有关当前位置的信息。上面的代码也是, 因此,将当前类指定为位置管理器 委派。
如果您感兴趣我从这里获得此信息,它是专门为iOS 5制作的:http://www.techotopia.com/index.php/Getting_iPhone_Location_Information_using_the_iOS_5_Core_Location_Framework
答案 3 :(得分:0)
在缓存位置的应用中遇到间歇性问题。有时,位置服务需要比预期更长的时间来返回位置,而是返回最后一个缓存位置。请参阅this iOS documentation示例,该示例使用howRecent
变量过滤掉可能已缓存的位置。
为了防止Apple更改其URL,此处列出了相关的委托方法:
// Delegate method from the CLLocationManagerDelegate protocol.
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
// If it's a relatively recent event, turn off updates to save power
NSDate* eventDate = newLocation.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (abs(howRecent) < 15.0)
{
NSLog(@"latitude %+.6f, longitude %+.6f\n",
newLocation.coordinate.latitude,
newLocation.coordinate.longitude);
}
// else skip the event and process the next one.
}
这实际上忽略了超过15秒的任何位置。我们在应用中将时间间隔设置为5.0
,但您必须尝试查看适合您的时间段。