UITableView被解除分配,而键值观察者仍在其中注册,只是在iOS9和iOS10中崩溃
我在解除锁定时移除了所有的障碍,但我看起来崩溃似乎并没有移除成功,我不知道为什么,每个人都可以帮助我UITableView被解除分配,而键值观察者仍在其中注册,只是在iOS9和iOS10中崩溃,ios,objective-c,key-value-observing,Ios,Objective C,Key Value Observing,我在解除锁定时移除了所有的障碍,但我看起来崩溃似乎并没有移除成功,我不知道为什么,每个人都可以帮助我 @interface SYDiagnoseFloatingView() @property (nonatomic, strong) UIImageView *imageView; @property (nonatomic, strong) NSMutableArray<UIScrollView *> *scrollViews; @end @implementation SYD
@interface SYDiagnoseFloatingView()
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) NSMutableArray<UIScrollView *> *scrollViews;
@end
@implementation SYDiagnoseFloatingView
这是我的代码和崩溃信息。我不知道我的代码出了什么问题,谁能帮我
@interface SYDiagnoseFloatingView()
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) NSMutableArray<UIScrollView *> *scrollViews;
@end
@implementation SYDiagnoseFloatingView
添加观察者
- (void)addFloatingTargetView:(UIScrollView *)scrollView {
if ([self.scrollViews containsObject:scrollView]) {
return;
}
[self.scrollViews addObject:scrollView];
[scrollView addObserver:self forKeyPath:keypath options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
}
堆栈跟踪
#0线程
NSInternalInconsistencyException
An instance 0x108d20600 of class UITableView was deallocated while key value observers were still registered with it. Current observation info: <NSKeyValueObservationInfo 0x171428ba0> ( <NSKeyValueObservance 0x174a4b370: Observer: 0x1742f8280, Key path: contentOffset, Options: <New: YES, Old: YES, Prior: NO> Context: 0x0, Property: 0x17125db50> )
解析原始
0 CoreFoundation ___exceptionPreprocess + 124
1 libobjc.A.dylib objc_exception_throw + 56
2 CoreFoundation -[NSException initWithCoder:]
3 Foundation _NSKVODeallocate + 300
4 CoreFoundation _common_removeAllObjects + 188
5 CoreFoundation -[__NSArrayM dealloc] + 28
6 SoYoungMobile40 -[SYDiagnoseFloatingView .cxx_destruct] (SYDiagnoseFloatingView.m:19)
7 libobjc.A.dylib 0x000000019203c000 + 28432
8 libobjc.A.dylib objc_destructInstance + 92
9 libobjc.A.dylib object_dispose + 28
10 UIKit -[UIResponder dealloc] + 156
11 UIKit -[UIView dealloc] + 1676
12 SoYoungMobile40 -[SYDiagnoseFloatingView dealloc] (SYDiagnoseFloatingView.m:0)
13 CoreFoundation _common_removeAllObjects + 188
14 CoreFoundation -[__NSArrayM dealloc] + 28
15 libobjc.A.dylib 0x000000019203c000 + 139232
16 UIKit -[UIView dealloc] + 1644
17 libobjc.A.dylib 0x000000019203c000 + 139232
18 UIKit -[UIView dealloc] + 1644
19 libobjc.A.dylib 0x000000019203c000 + 139232
20 UIKit -[UIView dealloc] + 1644
21 UIKit -[UINavigationTransitionView dealloc] + 100
22 libobjc.A.dylib 0x000000019203c000 + 139232
23 UIKit -[UIView dealloc] + 1644
24 UIKit -[UILayoutContainerView dealloc] + 64
25 libobjc.A.dylib 0x000000019203c000 + 139232
26 UIKit -[UIView dealloc] + 1644
27 libobjc.A.dylib 0x000000019203c000 + 139232
28 CoreFoundation _CFAutoreleasePoolPop + 28
29 CoreFoundation ___CFRunLoopRun + 1668
30 CoreFoundation CFRunLoopRunSpecific + 444
31 GraphicsServices GSEventRunModal + 180
32 UIKit -[UIApplication _run] + 684
33 UIKit UIApplicationMain + 208
34 SoYoungMobile40 main (main.m:16)
35 libdyld.dylib _start + 4
n内部一致性异常
UITableView类的实例0x108d20600已解除分配,而键值观察员仍在该实例中注册。当前观测信息:()
解析原始
0 CoreFoundation\uuuu异常预处理+124
1 libobjc.A.dylib objc_异常_抛出+56
2 CoreFoundation-[NSException initWithCoder:]
3基金会300
4 CoreFoundation_common_removeAllObjects+188
5核心基金会-[uuuu NSArrayM dealloc]+28
6 SoyongMobile40-[SyDiagnosticFloatingView.cxx_destruct](SyDiagnosticFloatingView.m:19)
7 libobjc.A.dylib 0x000000019203c000+28432
8 libobjc.A.dylib objc_破坏力+92
9 libobjc.A.dylib对象_dispose+28
10 UIKit-[UIResponder dealloc]+156
11 UIKit-[UIView DEALOC]+1676
12 SoyongMobile40-[SyDiagnosticFloatingView解除锁定](SyDiagnosticFloatingView.m:0)
13 CoreFoundation_common_removeAllObjects+188
14核心基金会-[uuuu NSArrayM dealloc]+28
15 libobjc.A.dylib 0x000000019203c000+139232
16 UIKit-[UIView DEALOC]+1644
17 libobjc.A.dylib 0x000000019203c000+139232
18 UIKit-[UIView DEALOC]+1644
19 libobjc.A.dylib 0x000000019203c000+139232
20 UIKit-[UIView DEALOC]+1644
21 UIKit-[UINavigationTransitionView解除锁定]+100
22 libobjc.A.dylib 0x000000019203c000+139232
23 UIKit-[UIView DEALOC]+1644
24 UIKit-[UILayoutContainerView解除锁定]+64
25 libobjc.A.dylib 0x000000019203c000+139232
26 UIKit-[UIView DEALOC]+1644
27 libobjc.A.dylib 0x000000019203c000+139232
28 CoreFoundation\u CFAutoreleasePoolPop+28
29 CoreFoundation\uuuuuuuuuuuuucfrunlooprun+1668
30核心基础CFRUNLOOPSCRUN+444
31图形服务GSEventRunModal+180
32 UIKit-[UIApplication\u run]+684
33 UIKit UIApplicationMain+208
34 Soyongmobile40干管(干管长度:16)
35 libdyld.dylib_start+4
我认为您添加了两次相同的观察者。始终调用[scrollView removeObserver:self-forKeyPath:keypath上下文:nil]
;[scrollView addObserver:self-forKeyPath:keypath选项:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld上下文:nil]之前代码>我认为您添加了两次相同的观察者。始终调用[scrollView removeObserver:self-forKeyPath:keypath上下文:nil]
;[scrollView addObserver:self-forKeyPath:keypath选项:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld上下文:nil]之前代码>如何添加观察者?我已将代码添加到问题中,请查看您在主线程调用中调用addFloatingTargetView:
?但可能调用两次。您是否尝试过我的答案中的代码?如何添加观察者?我已将代码添加到问题中。请查看您在主线程调用中调用addFloatingTargetView:
?但可能调用了两次。你试过我的答案中的代码了吗?是的,谢谢,另一个管理者仍然对scrollView进行KVO,但另一个管理者很弱scrollView@Chendichuan现在你没有例外了,对吧?是的,谢谢you@Chendichuan别忘了接受有用的答案。是的,谢谢,另一位经理仍然在浏览scrollView,但另一个管理薄弱环节scrollView@Chendichuan现在你没有例外了,对吧?是的,谢谢you@Chendichuan别忘了接受有用的答案。