Tim*_*Tim 7 iphone key-value-observing uinavigationcontroller observer-pattern
由于NavigationController,我有一个推入的ViewController(带有MKMapView).所以我有一个带有"后退"按钮的NavBar.单击该后退按钮,我收到一个错误:
2010-01-11 18:05:35.273 TestApp [147:207]正在释放类MKUserLocation的实例0x1758f0,而键值观察者仍然在其中注册.观察信息被泄露,甚至可能被错误地附加到其他物体上.在NSKVODeallocateBreak上设置断点以在调试器中停止.这是当前的观察信息:(上下文:0x0,属性:0x17d600>)程序接收信号:"EXC_BAD_ACCESS".
我有一个使用Observer实现的viewDidLoad方法:
- (void)viewDidLoad {
mapView = (MKMapView*)self.view;
mapView.delegate = self;
mapView.mapType = MKMapTypeHybrid;
mapView.showsUserLocation = YES;
// ...
[mapView.userLocation addObserver:self forKeyPath:@"location" options:0 context:NULL];
[super viewDidLoad];
Run Code Online (Sandbox Code Playgroud)
}
我的dealloc:
- (void)dealloc {
[groupId release];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这里有什么问题?我单击NavBar中的后退按钮然后我进入dealloc方法,然后它切换回更高的ViewController并抛出此错误.
非常感谢提前和最诚挚的问候.
Bra*_*son 12
您正在设置和删除不同对象上的观察者.您将视图控制器添加为第一个代码示例中userLocation的观察者,然后尝试将其从第二个默认通知中心中删除.要从userLocation中正确删除观察者,请将-dealloc方法更改为以下内容:
- (void)dealloc {
[groupId release];
[mapView.userLocation removeObserver:self forKeyPath:@"location"];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6807 次 |
| 最近记录: |