2014-04-14 3 views
-1

죄송합니다. 버그를 AFNetworking 문제가 아니라 UI 문제로 한정했습니다.iOS에서 팝업 창을 닫으려고 할 때 예외가 발생했습니다.

전 컬렉션보기가 있습니다. 콜렉션 뷰를 두드리면 팝 오버 윈도우가 표시되고 무언가를 다운로드하도록 선택할 수 있으며 진행률 표시 줄에 진행률이 표시됩니다. 그 동안에 collectionviewcell은 또 다른 진행 표시 줄을 자체적으로 표시합니다. 그런 다음 창을 닫고 셀을 다시 탭한 다음 무언가를 한 다음 닫습니다. 두 번째로 예외를 발생시키지 않을 수도 있으며 popOver를 열고 닫을 때 예외가 다시 발생합니다. 내가 추적 봄으로써 무엇이 잘못되었는지 아무 생각도 없어

* thread #1: tid = 0x1214fc, 0x38592626 libobjc.A.dylib`objc_msgSend + 6, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xb1b8d8b0) 
    frame #0: 0x38592626 libobjc.A.dylib`objc_msgSend + 6 
    frame #1: 0x302f7056 UIKit`-[UIApplication sendAction:to:from:forEvent:] + 90 
    frame #2: 0x302f6ff6 UIKit`-[UIApplication sendAction:toTarget:fromSender:forEvent:] + 30 
    frame #3: 0x302f6fd0 UIKit`-[UIControl sendAction:to:forEvent:] + 44 
    frame #4: 0x302e2736 UIKit`-[UIControl _sendActionsForEvents:withEvent:] + 374 
    frame #5: 0x302f6a4e UIKit`-[UIControl touchesEnded:withEvent:] + 590 
    frame #6: 0x302f6720 UIKit`-[UIWindow _sendTouchesForEvent:] + 528 
    frame #7: 0x302f16ea UIKit`-[UIWindow sendEvent:] + 758 
    frame #8: 0x302c68ec UIKit`-[UIApplication sendEvent:] + 196 
    frame #9: 0x302c4f96 UIKit`_UIApplicationHandleEventQueue + 7102 
    frame #10: 0x2da7125a CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14 
    frame #11: 0x2da7072a CoreFoundation`__CFRunLoopDoSources0 + 206 
    frame #12: 0x2da6ef1e CoreFoundation`__CFRunLoopRun + 622 
    frame #13: 0x2d9d9f4e CoreFoundation`CFRunLoopRunSpecific + 522 
    frame #14: 0x2d9d9d32 CoreFoundation`CFRunLoopRunInMode + 106 
    frame #15: 0x328d3662 GraphicsServices`GSEventRunModal + 138 
    frame #16: 0x3032516c UIKit`UIApplicationMain + 1136 
    * frame #17: 0x0003b12c ChinesePod`main(argc=1, argv=0x27dccd04) + 300 at main.m:39 

: 여기

는 lldb에서 BT 트레이스이다. 내 앱에 어떤 문제가 있다고 생각하십니까? 내가 NSZombie를 사용하도록 설정하면

, 내가 콘솔에서이 오류보고 : 편집

*** -[BlurViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x166e7df0 

BlurViewController는 팝 오버 창을 보여주는 책임의 ViewController이다. BlurViewController가 할당 해제되었다는 것을 의미합니까? dismissDialog의

소스 코드 :

- (void)dismissDialog 
{ 
    [UIView animateWithDuration:kAnimationDuration animations:^{ 
     self.view.alpha = 0.f; 
     self.popUp.transform = CGAffineTransformMakeScale(0, 0); 
    } completion:^(BOOL finished) { 
     [self removeFromParentViewController]; 
     [self.view removeFromSuperview]; 
     [self.popUp removeFromSuperview]; 
     if (!self.popUp.isDownloading) { 
      _popUp = nil; 
     } 

     [UIView animateWithDuration:kAnimationDuration animations:^{ 
      _blurView.alpha = 0.f; 
     } completion:^(BOOL finished) { 
      [_blurView removeFromSuperview]; 
     }]; 
    }]; 
} 
+0

AFNetworking을 사용하여 다운로드하는 데 사용하는 코드를 제공하십시오. – DilumN

+1

당신이 말하는 일부 객체가 릴리스되었습니다. popover 표시 방법에 대한 코드를 게시하십시오. 또한 NSZombies를 활성화하여 실행 해보십시오. – Paulw11

+0

@ Paulw11 Xode에서 좀비를 사용하면 일부는 도움이되지만 좀비 설정이있는 Instruments를 사용하면 훨씬 더 좋습니다 ... 모든 refcount 증가분과 감소율을 볼 수 있으며 모든 iOS에 대해 반드시 알아야 할 코드가 무엇인지 개발자 – RobP

답변

0

하루 디버깅을 지출 한 후 나는 마지막으로 그것을했다.

이전에 BlurViewController 인스턴스 bvController을 내 주 viewController에서 메소드 변수로 정의했지만, popOver UIView를 닫은 후에 bvController가 해제 된 것처럼 보입니다. 나는 강력한 속성으로 bvController을 옮기고 앱이 더 이상 충돌하지 않는 방법으로 다음 코드를 사용합니다.

MainViewController.h: 

@property (strong, nonatomic) BlurViewController *bvController; 

MainViewController.m: 

if (!self.bvController) { 
    self.bvController = [[BlurViewController alloc] init]; 
} 

메모리 할당 및 할당 해제는 Objective-C에서 정말 흥미 롭습니다. 자바와 파이썬 배경에서 나는 항상 내 머리를 긁적입니다.

관련 문제