2012-02-29 6 views
3

저는 응용 프로그램을 제어하기위한 메뉴 항목이있는 Mac의 메뉴 막대에있는 응용 프로그램을 가지고 있습니다. 응용 프로그램이 상호 작용없이 잠시 동안 실행 된 후에는 모든 메뉴 항목이 비활성화됩니다. 메뉴를 "고치는"유일한 방법은 앱을 다시 시작하는 것입니다 (이미 실행 중이며 앱을 종료하지 않고). 메뉴 항목이 다시 활성화됩니다.시간이 지나면 메뉴 막대 메뉴 항목이 비활성화됩니다.

이 메뉴에 대한 IBOutlet을 약하게 선언했기 때문에 문제가 발생했는데 강해야합니다. 아니면 이런 일이 발생할 수있는 또 다른 이유가 있습니까?

답변

1

나는 비슷한 앱을 제작 한 것으로, 메뉴 막대에 앉아서 설명하는 문제를 보지 않고 오랫동안 계속 실행할 수있었습니다. 당신의 문제를 일으키는 것이 정확히 무엇인지는 모르겠지만 NSMenu에 대한 강력한 IBOutlet 참조를 사용하면 문제가 없다고 말할 수 있습니다.

+0

나는 다른 누군가에게서 강하게 사용할 생각을 가지고 있으며, 지금 테스트 중입니다 ...하지만 제대로 작동하면 담당자에게 수여 할 것입니다. 감사. 또한 훌륭한 앱처럼 보입니다. 나는 5by5 팟 캐스트의 팬이다. – Dustin

+0

이것은 내가 정확히 찾고 있던 대답이다. 덕분에 – Dustin

1

NSMenuS는 NSMenuItems의 자동 유효성 검사를 수행합니다. 항목 대상 중 하나라도 nil이거나 대상이 의도 한 메시지에 응답하지 않으면 자동으로 비활성화됩니다. 이 동작을 무시하려면 NSMenu 하위 클래스의 validateMenuItem : implenet을 사용합니다. NSMenuItems가 비활성화 될 때 일반적으로 메시지의 대상이 해제되었거나 더 이상 사용할 수 없다는 것을 의미합니다.

+0

+1. 이것은 원래이 문제에 대해 들었을 때 생각한 것입니다. –

1

Mac OS X에서 ARC를 사용하는 경우 반드시은 펜촉의 최상위 레벨 객체에 콘센트를 만들 때 strong 참조를 사용하십시오. 그렇지 않으면 개체가 해제됩니다.

iOS의 경우 UIViewController이 작동하기 때문에 상황이 달라져 weak 참조를 사용해야합니다.

관련 문제