您好我收到此错误
类UITextField的实例0x18872c0已取消分配,而键值观察者仍在其中注册。观察信息被泄露,甚至可能被错误地附加到其他物体上。在NSKVODeallocateBreak上设置一个断点,在调试器中停止。
我正在观察在ViewDidLoad
中的文本字段上所做的更改 [textNumber addObserver:self forKeyPath:@"text" options:0 context:nil];
这在这里回应
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context {
if (textNumber.text.length==0) {
[buttonMakeAudioCall setImage:[UIImage imageNamed:@"off_green_btn.png"] forState:UIControlStateNormal];
buttonMakeAudioCall.userInteractionEnabled=NO;
}else{
[buttonMakeAudioCall setImage:[UIImage imageNamed:@"green_btn.png"] forState:UIControlStateNormal];
buttonMakeAudioCall.userInteractionEnabled=YES;
}
}
不幸的是,当响应来临时,app会在以下方法内崩溃。
NSURL *url = [NSURL URLWithString:string];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response,
NSData *data, NSError *connectionError)
{
if (data.length > 0 && connectionError == nil)
{
NSDictionary *greeting = [NSJSONSerialization JSONObjectWithData:data
options:0
error:NULL];
NSString *balance = [greeting objectForKey:@"balance"];
NSLog(@"balance is %@",balance);
labelStatus.text=[NSString stringWithFormat:@"%@€",balance];
}
}];
我理解的是文本字段对象/观察者在某个时刻被释放,我需要处理它。但是如何?我正在使用ARC。如果知道更好的人可以提供有关情况的更多信息,我可以处理它。 / p>
答案 0 :(得分:0)
我找到了原因。这是我身边的一个错误。在进入这个视图控制器之前,我正在调用一个方法。在那里我写下面的代码。
NSURL *url = [NSURL URLWithString:string];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response,
NSData *data, NSError *connectionError)
{
if (data.length > 0 && connectionError == nil)
{
NSDictionary *greeting = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
NSString *sipserver = [greeting objectForKey:@"ip"];
NSString *port = [greeting objectForKey:@"port"];
NSString *control_url = [greeting objectForKey:@"control_url"];
NSString *version = [greeting objectForKey:@"version"];
[[NSUserDefaults standardUserDefaults] synchronize];
[self.navigationController popViewControllerAnimated:YES];
[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"login"];
问题在于这一行。
[self.navigationController popViewControllerAnimated:YES];
我弹出当前视图控制器的父视图控制器。因为我已经使用了块,这就是这样的。无论如何我找到了解决方案。这与textfield或key value observer无关。希望如此答案有帮助。谢谢。