2012-11-30 4 views
2

OSX10.6에서 모노로 작업 중입니다.하지만이 질문은 코코아 전문가에게도 도움이됩니다.메인 스레드의 타이머가 울릴 때 코코아 컨텍스트 메뉴가 발생 함

NSTableView에 첨부 할 상황에 맞는 메뉴가 있습니다. 컨텍스트 메뉴를 선택하면 처리기 (테스트를 위해 비어 있음)는 ok라고하지만 응용 프로그램이 충돌합니다.

이 창 컨트롤러에서 내가 가지고있는 코드 :

... 
myNSTableView.Menu = new NSMenu(); 
NSMenuItem mi = new NSMenuItem("menu item 1", myHandler); 
myNSTableView.Menu.AddItem(mi); 
... 

public void myHandler(object Sender, EventArgs e) 
{ 
} 

나는 또한 최대한 빨리 상황에 맞는 메뉴에 액세스하려고으로 200ms마다

myNSTimer = NSTimer.CreateRepeatingScheduledTimer(new TimeSpan(2000000),delegate { 
     move an NSSlider    
     }); 

NSRunLoop.Main.AddTimer(myNSTimer, NSRunLoopMode.Common); 
NSRunLoop.Main.AddTimer(myNSTimer, NSRunLoopMode.EventTracking); 

을 반복하는 NSTimer의 설정을 가지고, 응용 프로그램이 매번 충돌합니다.

타이머를 시작하지 않으면 컨텍스트 메뉴가 정상입니다.

나는이 모든 것을 작동시키고 아이디어가 없어 졌기 때문에, 문제가있는 곳으로 포인터를 옮겨 주어야한다. 지금 당장 그 모노가 있다는 사실을 잊어 버리고 누구나 코코아 관점에서 문제를 볼 수 있습니까?

답변

2

타이머가 문제를 악화 시켰지만 NSMenuItems의 인스턴스 변수를 선언하지 않은 것이 원인이므로 가비지 수집 및 objc 수준의 충돌이 발생했습니다.