我的应用程序在从ViewController导航回到之前的ViewController时崩溃了。我已在观察员处注册为:
[tblViewActvityCalender addObserver:self
forKeyPath:@"contentSize"
options:0
context:NULL];
在delloc()方法中,我将观察者移除为:
[tblViewActvityCalender removeObserver:self forKeyPath:@"contentSize"];
但我仍然遇到应用程序崩溃(主要是在ios 8中)。我做错了什么???先谢谢..崩溃日志:
*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'类UITableView的实例0x7ab75400已取消分配,而键值观察者仍在其中注册。当前观察信息:(上下文:0x0,属性:0x7a601490>)'*第一次抛出调用堆栈:(0 CoreFoundation 0x0268f946 __exceptionPreprocess + 182 1 libobjc.A.dylib 0x02318a97 objc_exception_throw + 44 2 CoreFoundation 0x0268f86d + [NSException raise:format:] + 141 3基础0x01f496d4 NSKVODeallocate + 379 4 UIKit 0x0076459b - [UIView发布] + 89 5 UIKit 0x0077537a - [UIView(Hierarchy)removeFromSuperview] + 733 6 UIKit 0x00793399 - [UIScrollView removeFromSuperview] + 84 7 UIKit 0x007679bc - [UIView dealloc] + 483 8 UIKit的0x0076459b - [UIView的释放] + 89 9 libobjc.A.dylib 0x0232ceb1 objc_release + 65 10 libobjc.A.dylib 0x0232dd32 _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 586 11的CoreFoundation 0x02571678 _CFAutoreleasePoolPop + 24 12的CoreFoundation 0x025a876e __CFRunLoopRun + 2270 13的CoreFoundation 0x025a7bcb CFRunLoopRunSpecific + 443 14的CoreFoundation 0x025a79fb CFRunLoopRunInMode + 123 15 GraphicsServices 0x0443824f GSEventRunModal + 192 16 GraphicsServices 0x0443808c GS EventRun + 104 17 UIKit 0x006fa8b6 UIApplicationMain + 1526 18 e-Care 0x0023311d main + 141 19 libdyld.dylib 0x035a8ac9 start + 1)libc ++ abi.dylib:以NSException类型的未捕获异常终止(lldb)
试试下面,它可能会起作用......
今天我面临同样的问题......
删除View或ViewController之前你需要从屏幕上删除** tableview detaSource,Delegate和tableview然后删除屏幕后
只需在.m文件中添加以下代码即可。
-(void)dealloc
{
self.tableView.delegate = nil;
self.tableView.dataSource = nil;
self.tableView removeFromSuperview];
}
我希望它对你有用
我建议你阅读http://nshipster.com/key-value-observing/
在一个对象中,您使用
- (void)addObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
context:(void *)context
因此删除你应该使用的观察者(你做了)
removeObserver:forKeyPath:context
但是,可能发生的是在取消分配对象(在代码中称为self)之前取消分配UITableView。因此崩溃。
您应该确保此对象在取消分配之前取消注册,可以在viewDidDisappear
中进行