2011-03-06 8 views
10

मैं थोड़ी देर के साथ तालिका दृश्य पर setEditing:animated: को आमंत्रित करना चाहता हूं। आम तौर पर, मैं performSelector:withObject:afterDelay: प्रयोग करेंगे लेकिनप्रदर्शन चयनकर्ता का उपयोग करना: withObject: afterDelay: गैर-ऑब्जेक्ट पैरामीटर के साथ

  1. pSwOaD केवल एक पैरामीटर स्वीकार करता है
  2. setEditing:animated: को दूसरा पैरामीटर एक आदिम BOOL है - नहीं एक वस्तु

अतीत में मैं एक डमी विधि बन जाएगा अपनी खुद की कक्षा में, जैसे setTableAnimated और फिर [self performSelector:@selector(setTableAnimated) withObject:nil afterDelay:0.1f पर कॉल करें लेकिन यह मुझे लगता है कि मुझे लगता है।

क्या ऐसा करने का कोई बेहतर तरीका है?

उत्तर

19

प्रेषण_क्यू का उपयोग क्यों नहीं करें? के बाद से यह करने के लिए आप लिखने में कोई त्रुटि मिल गया है कि क्या के रूप में एक छोटे से भ्रम की स्थिति को दूर

double delayInSeconds = 2.0; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [tableView setEditing …]; 
    }); 
+0

मुझे नहीं पता कि यह क्यों नीचे मतदान किया गया था, मेरे लिए एक अच्छा समाधान की तरह लगता है। –

+0

यह एक अच्छा जवाब है! –

+0

क्योंकि यदि आप आईओएस 4 का उपयोग कर रहे हैं तो आईओएस 4 – Bill

1

चयनकर्ता setEditing:animated:performSelector:withObject:afterDelay के साथ संगत नहीं है। आप केवल 0 या 1 तर्कों के साथ विधियों को कॉल कर सकते हैं और तर्क (यदि कोई हो) एक वस्तु होनी चाहिए। तो आपका कामकाज जाने का रास्ता है। आप BOOL मान को NSValue ऑब्जेक्ट में लपेट सकते हैं और इसे अपने setTableAnimated विधि पर पास कर सकते हैं।

16

आप NSInvocation उपयोग करने की आवश्यकता:

इस कोड, इस answer से लिया देखें, और मैं इसे थोड़ा आपके सवाल का मिलान करने के लिए बदल दिया है:

BOOL yes = YES; 
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[self.tableView methodSignatureForSelector:@selector(setEditing:Animated:)]]; 
[inv setSelector:@selector(setEditing:Animated:)]; 
[inv setTarget:self.tableView]; 
[inv setArgument:&yes atIndex:2]; //this is the editing BOOL (0 and 1 are explained in the link above) 
[inv setArgument:&yes atIndex:3]; //this is the animated BOOL 
[inv performSelector:@selector(invoke) withObject:nil afterDelay:0.1f]; 
+0

मैं जैसे 'BOOL _yes = YES' एक वर नाम का उपयोग कर लगता है, एक छोटे से स्पष्ट है (हाँ बनाम हाँ)। – gabrielk

+0

यह भी इंगित करना चाहता था कि बस बस को बसने के बजाय 'YES' के लिए एक चर का उपयोग करने का कारण:' NSInvocation' अपवाद फेंकता है: '[NSInvocation setArgument: atIndex:]: NULL पता तर्क', [में समझाया गया यह उत्तर] (http://stackoverflow.com/a/11061349/146517)। – gabrielk

0

आप इसे चारों ओर अपने सिर प्राप्त कर सकते हैं , एक आमंत्रण ऑब्जेक्ट बनाने के लिए एनएसआईएनवोकेशन हथियार का उपयोग करें & इसे कई लोगों के बजाय 1 लाइन के साथ देरी के साथ कॉल करें: http://overooped.com/post/913725384/nsinvocation

+0

यदि कोई कक्षा बनाना शामिल है तो शायद ही एक पंक्ति। –

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

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