2011-06-10 9 views
13

मेरे पास NSMenuItem है जो मुझे प्रगति दिखाने के लिए अपडेट करने की आवश्यकता है (जैसे टाइम मशीन इसके बैकअप के साथ)। समस्या यह है कि जब मैंने उस NSMenuItem पर नया title सेट किया और title बदल नहीं रहा है।होस्ट मेनू दिखाए जाने पर NSMenuItem अद्यतन करें

जब मैं मेनू को बंद और दोबारा खोलता हूं तो वास्तव में यह बदल रहा है, लेकिन जब मैं इसे देख रहा हूं, तो मैं इसे अपडेट करना चाहता हूं।

मैंने किसी आइटम को हटाने का प्रयास किया और बिना किसी परिणाम के इसे फिर से डालने का प्रयास किया।

कोई बात नहीं?

उत्तर

18

यदि आपका अद्यतन कोड run loop mode में चलता है तो यह वास्तव में कोई अतिरिक्त प्रयास नहीं करता है जिसका उपयोग मेनू ट्रैकिंग के दौरान किया जाता है। यह NSEventTrackingRunLoopMode है, लेकिन आप शायद NSRunLoopCommonModes का उपयोग करना चाहते हैं, इसलिए मेनू आइटम शीर्षक के नीचे मेनू आइटम शीर्षक सही है।

- (void)doStuff; 
{ 
    static int i = 0; 
    [foo setTitle:[NSString stringWithFormat:@"%d", ++i]]; 
} 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification; 
{ 
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature: 
           [self methodSignatureForSelector:@selector(doStuff)]]; 
    [invocation setTarget:self]; 
    [invocation setSelector:@selector(doStuff)]; 
    [[NSRunLoop mainRunLoop] addTimer:[NSTimer timerWithTimeInterval:1 invocation:invocation repeats:YES] forMode:NSRunLoopCommonModes]; 
} 
+0

बहुत मूल्यवान जवाब:

यहाँ एक मेनू आइटम foo कि सेकंड की संख्या की गणना के बाद से एप्लिकेशन का शुभारंभ का एक सरल उदाहरण है। लोगों को पहली बार मेन्यू रनलोप का सामना करना पड़ता है, यह लोगों के लिए यह एक बहुत ही आम समस्या है। –

+0

आप बिल्कुल सही निकोलस हैं, 'प्रदर्शन चयनकर्ता: बाद में:' जो 'NSDefaultRunLoopMode' पर चलते हैं' के साथ ऐसा करने का प्रयास कर रहा था। आपके उत्तर के लिए बहूत बहूत धन्यवाद। – gcamp

संबंधित मुद्दे