我想我错过了一些明显的东西。 我有一个(CLLocation *)lastqueriedlocation在标头中定义为属性并合成。我想在locationManager中更新它:didUPdateToLocation:fromLocation:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ CLLocationDistance dist = [lastQueriedLocation getDistanceFrom:newLocation]; if (dist>1000) { lastQueriedLocation = newLocation; [self reSearch:lastQueriedLocation]; } if ([resultArray count] > 0) { [self findAndDisplayNearestLocation:location]; } }
在viewDidLoad中分配并初始化了lastQueriedLocation。
问题是lastQueriedLocation = newLocation;
当然导致EXC_BAD_ACCESS
。那么持久化lastQueriedLocation的正确方法是什么?
如果它有助于使问题更具体 - reSearch正在调用一个Web服务,在距离该位置2公里范围内获取POI - 所以我只想在移动1km时才这样做...但我仍然希望保持准确性最好,所以我可以突出显示最近的,滚动地图等。
答案 0 :(得分:1)
您只是设置iVar而不是合成属性,这意味着属性不会保留newLocation。
将lastQueriedLocation = newLocation;
替换为:
[self setLastQueriedLocation:newLocation];
或者,如果您更喜欢使用点符号:
self.lastQueriedLocation = newLocation;