私は次の状況にあります:
- NSTableViewを含む最初のウィンドウ内に1つのカスタムビューがあります。
- 最初のウィンドウ内のテーブルビューの選択の背後にある現在のオブジェクトのフォームとして機能する2番目のウィンドウがあります。
詳細:
- 基本的に2番目のウィンドウを開くNSTableViewにsetDoubleAction:動作を実装しました
- テーブルビューは、(サブクラス化された)NSArrayControllerのarrangedObjectsにバインドされます
- 2番目のウィンドウ(ダブルクリックで開く)の特定のインターフェイス要素は、NSArrayControllerの選択にバインドされます
- NSArrayControllerをサブクラス化し、次の関数を変更しました。
最初に私はaddObjectを変更しました:(またはadd:、これは実際には重要ではありません):
- (void)addObject:(id)object
{
[super addObject:object];
[self saveTemplatesToDisk];
}
次に、removeを変更しました。
- (void)remove:(id)sender
{
[super remove:sender];
[self saveTemplatesToDisk];
}
- プリファレンスシートを開くアクションは、1つのライナーです。
[NSApp beginSheet:preferenceWindow modalForWindow:[_preferenceView window] modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
- ユーザーがリターンキー/OKボタンを押した後に実行されるコードも複雑ではありません。
アレイコントローラの現在のコンテンツをディスクに保存し、2番目のウィンドウを閉じます。
- (IBAction)endPreferenceSheet:(id)sender
{
[templateArrayController saveTemplatesToDisk];
[NSApp endSheet:preferenceWindow];
[preferenceWindow orderOut:nil];
}
最後に、これが私の問題/質問です
2番目のウィンドウでリターンキーを押すと、ウィンドウが閉じ、データが保存され、NSTableViewがそれ以上の操作なしで適切に再ロードされます。しかし、マウスでOKボタンを押しても、何も起こらないようです。ここに興味深い部分があります。2番目のウィンドウが消えた後、最初のウィンドウのテーブルビューで別の行を選択すると、以前に選択した行(読み取り:更新されたオブジェクト)が適切に再読み込みされ、2番目に編集したコンテンツが表示されます選択範囲にバインドされたインターフェイス要素を持つウィンドウ。
基本的に私の実装は機能しますが、ユーザーがマウスを使用してウィンドウを閉じる場合は機能しません。
私が見つけられる唯一の違いはcurrentEventですが、これがこの単純なアプリケーションの動作をどのように変えることができるか想像できません。
- マウスでOKボタンを押すと:
NSEvent: type=LMouseUp loc=(563.055,30.1484) time=58450.2 flags=0 win=0x0 winNum=5371 ctxt=0x0 evNum=8093 click=1 buttonNumber=0 pressure=0 subtype=NSTabletPointEventSubtype deviceID=0 x=19469 y=15838 z=0 buttons=0x0 pressure=0.000000 tilt={0.453108, -0.140629} rotation=0.000000 tangentialPressure=0.000000 vendor1-3=(0, 0, 0)
- Returnキーを押すと:
NSEvent: type=KeyDown loc=(0,300) time=58474.8 flags=0 win=0x0 winNum=5371 ctxt=0x0 chars=" " unmodchars=" " repeat=0 keyCode=36
問題を解決する方法はありますか?