2016-09-07 2 views
0

나는이 충돌이 매우 무작위로 발생보고 있어요 : 나는 SEGUE 식별자가 올바른지 확인하고 스토리 보드가 존재하고 SEGUE를 포함 한스토리 보드 충돌 OSX

Fatal Exception: NSInvalidArgumentException 
    *** setObjectForKey: object cannot be nil (key: NSViewController-Qmf-WE-Bmb) 
0 CoreFoundation     0x7fff95e504da __exceptionPreprocess 
1 libobjc.A.dylib    0x7fff923eef7e objc_exception_throw 
2 CoreFoundation     0x7fff95d4a414 -[__NSDictionaryM setObject:forKey:] 
3 AppKit       0x7fff9857f917 -[NSStoryboard nibForControllerWithIdentifier:] 
4 AppKit       0x7fff9857fc11 -[NSStoryboard instantiateControllerWithIdentifier:] 
5 AppKit       0x7fff982e733b -[NSStoryboardSegueTemplate _perform:] 
6 AppKit       0x7fff983345d7 -[NSViewController performSegueWithIdentifier:sender:] 
7 libdispatch.dylib    0x7fff8e5cc93d _dispatch_call_block_and_release 
8 libdispatch.dylib    0x7fff8e5c140b _dispatch_client_callout 
9 libdispatch.dylib    0x7fff8e5d4c1c _dispatch_main_queue_callback_4CF 
10 CoreFoundation     0x7fff95e059e9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ 
11 CoreFoundation     0x7fff95dc48dd __CFRunLoopRun 
12 CoreFoundation     0x7fff95dc3ed8 CFRunLoopRunSpecific 
13 HIToolbox      0x7fff99b4b935 RunCurrentEventLoopInMode 
14 HIToolbox      0x7fff99b4b76f ReceiveNextEventCommon 
15 HIToolbox      0x7fff99b4b5af _BlockUntilNextEventMatchingListInModeWithFilter 
16 AppKit       0x7fff97e3bdf6 _DPSNextEvent 
17 AppKit       0x7fff97e3b226 -[NSApplication _nextEventMatchingEventMask:untilDate:inMode:dequeue:] 
18 AppKit       0x7fff97e2fd80 -[NSApplication run] 
19 AppKit       0x7fff97df9368 NSApplicationMain 
20 libdyld.dylib     0x7fff8c6875ad start 

. 또한 ID가 Qmf-WE-Bmb 인보기 컨트롤러가 있는지 확인했습니다.

이것이 일어날 수있는 단서가 있습니까? 이는 소스 VC가 할당 해제되었거나 목적지 VC를로드하지 못했음을 의미합니까? 사람이 같은 문제 안타 경우

+0

당신은 더 나은 여기에 코드를 게시 할 것입니다. 치명적인 예외는 ** setObjectForKey : 개체가 없음 일 수 없습니다 **. 개체가 없습니다. – SeanChense

+0

NSStoryboard 내부에서 전화가 오나요? –

+0

아마도 그렇게하지 않을 것입니다. – SeanChense

답변

0

, 내 기본 컨트롤러에 사용자 정의 기능을 performSegueWithIdentifier:를 대체하여 충돌을 피할 :

- (void)performManualSegueWithControllerID:(NSString *)identifier { 
    if ([NSThread isMainThread]) { 
     NSViewController *controller = [self.storyboard instantiateControllerWithIdentifier:identifier]; 
     if (controller) { 
      MyCustomAnimator *animator = [[MyCustomAnimator alloc] init]; 
      [animator setAnimateVertically:NO]; 
      [self prepareForManualSegueToController:controller]; 
      [self presentViewController:controller animator:animator]; 
     } else { 
      // Some Error 
     } 
    } else { 
     [self performSelectorOnMainThread:@selector(performManualSegueWithControllerID:) 
           withObject:identifier 
          waitUntilDone:NO]; 
    } 
} 

- (void)prepareForManualSegueToController:(NSViewController *)controller { 

}