Xcode IOS 5消息发送到alloc命令上的解除分配实例

Xcode IOS 5消息发送到alloc命令上的解除分配实例,xcode,ios5,gdb,instance,Xcode,Ios5,Gdb,Instance,我在使用ARC的Ios 5应用程序上出现以下错误: *** -[ViewDettaglio respondsToSelector:]: message sent to deallocated instance 0x12193300 ***-[ViewDettaglio respondsToSelector:]:消息发送到解除分配的实例0x12193300 在控制台上,我写入命令: info malloc-history 0x12193300 信息malloc历史0x12193300 我得到以下堆

我在使用ARC的Ios 5应用程序上出现以下错误:

*** -[ViewDettaglio respondsToSelector:]: message sent to deallocated instance 0x12193300 ***-[ViewDettaglio respondsToSelector:]:消息发送到解除分配的实例0x12193300 在控制台上,我写入命令:

info malloc-history 0x12193300 信息malloc历史0x12193300 我得到以下堆栈跟踪:

Alloc: Block address: 0x12193300 length: 192 Stack - pthread: 0xa08a3540 number of frames: 31 0: 0x96bdab03 in malloc_zone_calloc 1: 0x96bdaa5a in calloc 2: 0x16f8c93 in class_createInstance 3: 0x170388b in _objc_rootAllocWithZone 4: 0x21af661 in +[NSObject allocWithZone:] 5: 0x17038b9 in _objc_rootAlloc 6: 0x2c4c8 in -[ViewElenco CaricaViewDettaglio:] at /Users/.../ViewElenco.m:186 7: 0x2e550 in -[ViewElenco mapView:annotationView:calloutAccessoryControlTapped:] at /Users/.../ViewElenco.m:337 8: 0x3fa99c 9: 0x405faa in MKLongHash 10: 0x21aeec9 in -[NSObject performSelector:withObject:withObject:] 11: 0x60d5c2 in -[UIApplication sendAction:to:from:forEvent:] 12: 0x60d55a in -[UIApplication sendAction:toTarget:fromSender:forEvent:] 13: 0x6b2b76 in -[UIControl sendAction:to:forEvent:] 14: 0x6b303f in -[UIControl(Internal) _sendActionsForEvents:withEvent:] 15: 0x6b22fe in -[UIControl touchesEnded:withEvent:] 16: 0x632a30 in -[UIWindow _sendTouchesForEvent:] 17: 0x632c56 in -[UIWindow sendEvent:] 18: 0x619384 in -[UIApplication sendEvent:] 19: 0x60caa9 in _UIApplicationHandleEvent 20: 0x1a95fa9 in PurpleEventCallback 21: 0x21811c5 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ 22: 0x20e6022 in __CFRunLoopDoSource1 23: 0x20e490a in __CFRunLoopRun 24: 0x20e3db4 in CFRunLoopRunSpecific 25: 0x20e3ccb in CFRunLoopRunInMode 26: 0x1a94879 in GSEventRunModal 27: 0x1a9493e in GSEventRun 28: 0x60aa9b in UIApplicationMain 29: 0x20bb in main at /Users/.../main.m:14 30: 0x2065 in start Alloc:块地址:0x12193300长度:192 堆栈-pthread:0xa08a3540帧数:31 malloc_zone_calloc中的0:0x96bdab03 calloc中的1:0x96bdaa5a 类_createInstance中的2:0x16f8c93 3:0x170388b位于_objc_rootAllocWithZone中 +[NSObject allocWithZone:]中的4:0x21af661 5:0x17038b9 in_objc_rootAlloc 6:0x2c4c8 in-[ViewElenco-CaricaViewDettaglio:]at/Users/../ViewElenco.m:186 7:0x2e550 in-[ViewElenco映射视图:注释视图:calloutAccessoryControlTapped:]at/Users/../ViewElenco.m:337 8:0x3fa99c MKLongHash中的9:0x405faa 10:0x21aeec9 in-[NSObject性能选择器:withObject:withObject:] 11:0x60d5c2 in-[UIApplication sendAction:to:from:forEvent:] 12:0x60d55a in-[UIApplication sendAction:toTarget:fromSender:forEvent:] 13:0x6b2b76英寸-[UIControl发送操作:发送到:forEvent:] 14:0x6b303f in-[UIControl(内部)\发送操作预防:带事件:] 15:0x6b22fe in-[UIControl触摸已结束:带事件:] 16:0x632a30英寸-[UIWindow\u sendTouchesForEvent:] 17:0x632c56 in-[UIWindow sendEvent:] 18:0x619384 in-[UIApplication sendEvent:] 19:0x60caa9 in_UIApplicationHandleEvent 20:0x1a95fa9英寸紫背 21:0x21811c5 in运行循环调用OUT执行函数__ 22:0x20e6022 in_u_CFRunLoopDoSource1 23:0x20e490a在\uuuu CFRunLoopRun中 CFRunLoopRunSpecific中的24:0x20e3db4 25:0x20e3ccb处于CFRUNLOOP运行模式 GSEventRunModal中的26:0x1a94879 27:GSEventRun中的0x1a9493e UIApplicationMain中的28:0x60aa9b 29:0x20bb位于/Users/../main.m:14的main中 30:0x2065处于启动状态 ViewElenco.m第186行的代码如下:

ViewDettaglio *viewq=[[ViewDettaglio alloc] initWithNibName:@"ViewDettaglio" bundle:nil]; ViewDettaglio*viewq=[[ViewDettaglio alloc]initWithNibName:@“ViewDettaglio”包:nil]; 这怎么会发生? 我使用UINavigationController从ViewElenco和ViewDettaglio导航

编辑

在以下代码中是否可能:

ViewDettaglio* viewDettaglio=[[ViewDettaglio alloc] initWithNibName:@"ViewDettaglio" bundle:nil]; viewDettaglio.idObject=idObj; [self.navigationController pushViewController:viewDettaglio animated:YES]; ViewDettaglio*ViewDettaglio=[[ViewDettaglio alloc]initWithNibName:@“ViewDettaglio”包:nil]; viewDettaglio.idObject=idObj; [self.navigationController pushViewController:viewdetaglio动画:是];
alloc返回一个解除分配的对象?

问题已经解决:在ViewDettaglio和ViewElenco中有一个MKMapView,委托被设置为容器ViewController。 在UINavigationController中推送新的ViewController时,可能MapView创建的某个线程仍在运行并调用map delegate,即使它不可见

解决方案是在视图消失时将委托设置为null,并在视图出现之前再次设置:

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    self.mapView.delegate=nil;
}
- (void)viewWillAppear:(BOOL)animated
{    
    [super viewWillAppear:animated];
    self.mapView.delegate=self;
}

调用respondsToSelector:的行在哪里?在创建视图控制器和该行之间会发生什么?是否正确地将视图控制器添加到导航控制器?你能展示一下吗?你在用故事板吗?如果是这样,您可能需要查看以下内容:。您不能为情节提要中的视图调用initWithNibName。@Canopus:不,我没有使用情节提要。该应用程序是为ios4开发的,后来转换为使用ARC@jrturton:要将视图添加到导航控制器,我使用:[self.navigationController pushViewController:viewq动画:是]@jrturton:“调用respondsToSelector的那一行:”你是指调用stacktrace第7行函数的代码?如果是,则此函数是地图注释视图中AccessoryControl的目标操作。谢谢您,它非常有用哇!谢谢你。完全解决了我的问题。另外,正如编程人员200005所说,请将这个答案标记为正确。哦,我的天哪,我非常感谢你给出了这个令人敬畏的答案+1.