2011-10-25 6 views
2

NSWindowControllerのサブクラスで[self window]はnullです。自己ウィンドウはnullですが、ウィンドウのアウトレットが正しくリンクされています

私のnibファイルには、File's Owner(私のサブクラス)とWindow Viewの間にリンクがあります。

なぜこのエラーが発生しますか?

ファイル所有者のクラス(NSWindowControllerのサブクラス)をリファクタリングすると、動作が停止しました。私はペン先でそれを更新したので、なぜそれが機能しなくなったのか分かりません。 NSWindowControllerを作成する方法

session = [NSApp beginModalSessionForWindow:[self window]]; 



    2011-10-25 12:27:14.377 MyApp [13161:b0f] *** Assertion failure in -[CBApplication _commonBeginModalSessionForWindow:relativeToWindow:modalDelegate:didEndSelector:contextInfo:], /SourceCache/AppKit/AppKit-1138.23/AppKit.subproj/NSApplication.m:3861 
    2011-10-25 12:27:14.377 MyApp[13161:b0f] An uncaught exception was raised 
    2011-10-25 12:27:14.378 MyApp[13161:b0f] Modal session requires modal window 
    2011-10-25 12:27:14.380 MyApp[13161:b0f] (
     0 CoreFoundation      0x92e01d87 __raiseError + 231 
     1 libobjc.A.dylib      0x9317e149 objc_exception_throw + 155 
     2 CoreFoundation      0x92d69619 +[NSException raise:format:arguments:] + 137 
     3 Foundation       0x9c41c36f -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116 
     4 AppKit        0x958a987d -[NSApplication _commonBeginModalSessionForWindow:relativeToWindow:modalDelegate:didEndSelector:contextInfo:] + 725 
     5 AppKit        0x958a1973 -[NSApplication beginModalSessionForWindow:] + 72 
     6 MyApp      0x00042ca3 -[CBWindowController showModal:] + 131 
     7 MyApp      0x00023c46 -[CBDocument showLinkWindow:shouldLinkAndUpdate:selectedOnly:] + 1174 
     8 MyApp      0x00023cb1 -[CBDocument linkAllRootItems:] + 81 
     9 MyApp      0x0002a9b4 -[CBApplicationDelegate linkAllItems:] + 100 
     10 CoreFoundation      0x92d57091 -[NSObject performSelector:withObject:] + 65 
     11 AppKit        0x956e1cb3 -[NSApplication sendAction:to:from:] + 232 
     12 AppKit        0x957d5caf -[NSMenuItem _corePerformAction] + 536 
     13 AppKit        0x957d592c -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 171 
     14 AppKit        0x957d4fb5 -[NSMenu _performActionWithHighlightingForItemAtIndex:sendAccessibilityNotification:] + 79 
     15 AppKit        0x95aaddab -[NSMenu performActionForItemAtIndex:] + 65 
     16 AppKit        0x95aaddde -[NSMenu _internalPerformActionForItemAtIndex:] + 45 
     17 AppKit        0x95ab200f -[NSMenuItem _internalPerformActionThroughMenuIfPossible] + 106 
     18 AppKit        0x9591ba10 -[NSCarbonMenuImpl _carbonCommandProcessEvent:handlerCallRef:] + 172 
     19 AppKit        0x9574a916 NSSLMMenuEventHandler + 452 
     20 HIToolbox       0x9b175920 _Z22_InvokeEventHandlerUPPP25OpaqueEventHandlerCallRefP14OpaqueEventRefPvPFlS0_S2_S3_E + 36 
     21 HIToolbox       0x9aff1803 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1602 
     22 HIToolbox       0x9aff0c80 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 482 
     23 HIToolbox       0x9b005aa9 SendEventToEventTarget + 76 
     24 HIToolbox       0x9b175de4 _ZL18SendHICommandEventmPK9HICommandmmhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef + 482 
     25 HIToolbox       0x9b175e4e SendMenuCommandWithContextAndModifiers + 70 
     26 HIToolbox       0x9b1e0697 SendMenuItemSelectedEvent + 275 
     27 HIToolbox       0x9b0423f9 _ZL19FinishMenuSelectionP13SelectionDataP10MenuResultS2_ + 129 
     28 HIToolbox       0x9b1d1574 _ZL14MenuSelectCoreP8MenuData5PointdmPP13OpaqueMenuRefPt + 608 
     29 HIToolbox       0x9b03a0b2 _HandleMenuSelection2 + 636 
     30 HIToolbox       0x9b039e31 _HandleMenuSelection + 53 
     31 AppKit        0x95646356 _NSHandleCarbonMenuEvent + 302 
     32 AppKit        0x955d662e _DPSNextEvent + 2196 
     33 AppKit        0x955d58ab -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 113 
     34 AppKit        0x955d1c22 -[NSApplication run] + 911 
     35 AppKit        0x9586618a NSApplicationMain + 1054 
     36 MyApp      0x000042f4 main + 36 
     37 MyApp      0x00002e06 start + 54 

:行をクラッシュ

CBWindowController *windowController = [[subClass alloc] init]; 
[windowController setRanAsModal:YES]; 
[windowController setDelegate:self]; 
[windowController setRootDocument:[NSApp mainWindowDocument]]; 
[windowController loadWindow]; 
[windowController centerOnMainWindow:sender]; 
+0

もう少し詳細なコンテキストを表示できますか?自己は何ですか、そしてそれはどのように作られますか、窓は何ですか、それはどのように割り当てられますか?リファクタリングでは、コード化したnib名(例:@ "MyNibName")が変更されないため、問題が発生している可能性があります。 – jrturton

+0

@jrturton xibファイルのファイル名は変更されません。私がxibファイルで更新したのはFile Owner Classです。基本的に私はファイル所有者の名前クラスをリファクタリングしました。とにかくコードは動作するはずです。 – aneuryzm

+0

OK、いくつかのコンテキストはまだ良いです。私の2番目の推測では、ファイルの所有者クラスを変更した後にコンセントを再接続していないということです。 – jrturton

答えて

2

[self window]は有効なウィンドウオブジェクトを指している必要があります。あなたのコメントから、そうではありません。

ウィンドウコンセントを確認して再接続するか、コンセントがない場合は、有効なオブジェクトがその変数に保持されていることを確認する必要があります。

自動リファクタリングはすべてを捕まえるようには見えないため、将来このような問題を防ぐためにリファクタリングした後、古い名前のプロジェクトを検索することは価値のある演習のようです。

+0

実際、最後のコメントであなたを書いたので、私はアウトレットを再接続しましたが、それでもnullです(ファイルの所有者からウィンドウコンポーネントに行をドラッグしてプロパティウィンドウを選択しました) – aneuryzm

+0

そして、私はxibファイルのWindowオブジェクトを変更しませんでした。これまでに変更されたのはFile's Ownerのクラスです(refaの後ctoring)。 – aneuryzm

+0

私はインターネット上でこのリードを発見しました:同じウィンドウコントローラのより多くのインスタンス..私はコードを変更していないのでほとんど信じませんが、多くのインスタンスがあるかどうかをどうやって確認できますか? – aneuryzm

2

私はあなたがそれを間違って初期化していると思っています。

CBWindowController *windowController = 
    [[subClass alloc] initWithWindowNibName:@"MyWindow" owner:nil]; 

さらに、このコードをウィンドウコントローラーのinitメソッドに入力するだけで、NIB名を指定する必要があります。

編集:また、オブジェクトにloadWindowを呼び出さないでください。このメソッドは、ドキュメントに記載されているように、ウィンドウにアクセスすると自動的に呼び出されます。

+0

あなたはその賭けに勝つだろう...私の答えにコメントスレッドの最後に行く:) – jrturton

関連する問題