คำถามติดแท็ก selector

ตัวเลือกสามารถเป็นสตริงที่ระบุชื่อวิธีการในภาษาโปรแกรม Objective-C หรือ Smalltalk หรือสวิตช์ชนิดพิเศษที่ใช้ในคอมพิวเตอร์เพื่อเชื่อมต่อหลายบรรทัด (I / O) เข้ากับบรรทัดเดียว โปรดอย่าใช้แท็กนี้สำหรับตัวเลือก jQuery / CSS

23
@selector () ใน Swift หรือไม่
ฉันพยายามที่จะสร้างNSTimerในSwiftแต่ฉันมีปัญหาบางอย่าง NSTimer(timeInterval: 1, target: self, selector: test(), userInfo: nil, repeats: true) test() เป็นฟังก์ชั่นในชั้นเดียวกัน ฉันพบข้อผิดพลาดในเครื่องมือแก้ไข: ไม่พบโอเวอร์โหลดสำหรับ 'init' ที่ยอมรับอาร์กิวเมนต์ที่ให้มา เมื่อฉันเปลี่ยนselector: test()ไปselector: nilหายไปข้อผิดพลาด ฉันได้พยายาม: selector: test() selector: test selector: Selector(test()) แต่ไม่มีอะไรทำงานและฉันไม่สามารถหาวิธีแก้ปัญหาในการอ้างอิง
659 swift  selector  nstimer 

16
อะไรคือ Swift ที่เทียบเท่ากับ responssToSelector?
ฉัน googled แต่ไม่สามารถค้นหาสิ่งที่เทียบเท่ากับที่respondsToSelector:รวดเร็ว นี่เป็นสิ่งเดียวที่ฉันสามารถหาได้ ( ทางเลือกที่รวดเร็วในการตอบสนองต่อ SelectSelector:)แต่ไม่เกี่ยวข้องกันมากเกินไปในกรณีที่ตรวจสอบการมีอยู่ของผู้รับมอบสิทธิ์ฉันไม่มีผู้รับมอบสิทธิ์ฉันแค่ต้องการตรวจสอบว่ามี API ใหม่หรือไม่ หรือไม่เมื่อทำงานบนอุปกรณ์และหากไม่ถอยกลับไปเป็นรุ่นก่อนหน้าของ API

12
วิธีกำจัดคำเตือน 'ตัวเลือกที่ไม่ได้ประกาศ'
ฉันต้องการใช้ตัวเลือกบนอินสแตนซ์ของ NSObject โดยไม่จำเป็นต้องใช้โปรโตคอลที่นำมาใช้ ตัวอย่างเช่นมีวิธีหมวดหมู่ที่ควรตั้งค่าคุณสมบัติข้อผิดพลาดหากอินสแตนซ์ NSObject ที่เรียกใช้สนับสนุน นี่คือรหัสและรหัสทำงานตามที่ตั้งใจไว้: if ([self respondsToSelector:@selector(setError:)]) { [self performSelector:@selector(setError:) withObject:[NSError errorWithDomain:@"SomeDomain" code:1 userInfo:nil]]; } อย่างไรก็ตามคอมไพเลอร์ไม่เห็นวิธีการใด ๆ รอบ ๆ ด้วย setError: ลายเซ็นดังนั้นมันทำให้ฉันเตือนสำหรับแต่ละบรรทัดที่มี@selector(setError:)ตัวอย่าง: Undeclared selector 'setError:' ฉันไม่ต้องการประกาศโปรโตคอลเพื่อกำจัดคำเตือนนี้เพราะฉันไม่ต้องการให้ทุกคลาสที่สามารถใช้สิ่งนี้เพื่อใช้สิ่งพิเศษ เพียงแค่การประชุมฉันต้องการให้พวกเขามีsetError:วิธีการหรือทรัพย์สิน เป็นไปได้หรือไม่ อย่างไร? ไชโย สอี

30
ข้อผิดพลาด“ ตัวเลือกที่ไม่รู้จักส่งไปยังอินสแตนซ์” ใน Objective-C
ฉันสร้างปุ่มและเพิ่มการกระทำให้ แต่ทันทีที่มีการเรียกใช้ฉันได้รับข้อผิดพลาดนี้: -[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance 0x3d03ac0 2010-03-16 22:23:58.811 Money[8056:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:'*** -[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance 0x3d03ac0' นี่คือรหัสของฉัน: - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { UIButton *numberButton = [UIButton buttonWithType:UIButtonTypeCustom]; numberButton.frame …

7
วัตถุประสงค์ -C: การเรียกตัวเลือกที่มีหลายอาร์กิวเมนต์
ใน MyClass.m ฉันได้กำหนดไว้แล้ว - (void) myTest: (NSString *) withAString{ NSLog(@"hi, %@", withAString); } และการประกาศที่เหมาะสมใน MyClass.h หลังจากนั้นฉันต้องการโทร [self performSelector:@selector(mytest:withAString:) withObject: mystring]; ใน MyClass.m แต่ฉันได้รับข้อผิดพลาดคล้ายกับ * แอปสิ้นสุดเนื่องจากข้อยกเว้นที่ไม่ได้ตรวจสอบ 'NSInvalidArgumentException' เหตุผล: '* - [MyClass myTest: withAtring:]: ตัวเลือกที่ไม่รู้จักถูกส่งไปยังอินสแตนซ์ 0xe421f0' ฉันลองกรณีที่ง่ายกว่าด้วยตัวเลือกที่ไม่มีข้อโต้แย้งที่พิมพ์สตริงไปยังคอนโซลและทำงานได้ดี เกิดอะไรขึ้นกับรหัสและฉันจะแก้ไขได้อย่างไร ขอบคุณ

8
ตัวเลือกใน Objective-C?
อันดับแรกฉันไม่แน่ใจว่าฉันเข้าใจจริงๆว่าตัวเลือกคืออะไร จากความเข้าใจของฉันมันเป็นชื่อของวิธีการและคุณสามารถกำหนดให้กับคลาสประเภท 'SEL' จากนั้นเรียกใช้เมธอดเช่น responseToSelector เพื่อดูว่าผู้รับใช้เมธอดนั้นหรือไม่ ใครช่วยเสนอคำอธิบายที่ดีกว่านี้ได้ไหม ประการที่สองถึงจุดนี้ฉันมีรหัสต่อไปนี้: NSString *thing = @"Hello, this is Craig"; SEL sel = @selector(lowercaseString:); NSString *lower = (([thing respondsToSelector:sel]) ? @"YES" : @"NO"); NSLog (@"Responds to lowercaseString: %@", lower); if ([thing respondsToSelector:sel]) //(lower == @"YES") NSLog(@"lowercaseString is: %@", [thing lowercaseString]); อย่างไรก็ตามแม้ว่าthingจะเห็นได้ชัดว่าเป็น NSString ชนิดหนึ่งและควรตอบสนองต่อ lowercaseString แต่ฉันไม่สามารถรับเงื่อนไข …


4
การยกเลิกการเข้าคิว performSelector: afterDelay โทร
มีใครทราบบ้างว่าเป็นไปได้หรือไม่ที่จะยกเลิกเหตุการณ์ตัวเลือกที่จัดคิวไว้แล้วจากสแต็กเหตุการณ์หรือสแต็กตัวจับเวลา (หรือกลไกใดก็ตามที่ API ใช้) เมื่อคุณโทรperformSelector:withObject:afterDelay? ฉันใช้สแต็กเหตุการณ์นี้เพื่อแก้ไขแอตทริบิวต์ของรูปภาพภายในแท็บ TabBar และบางครั้งอาจจัดคิวการเปลี่ยนแปลงที่มีมูลค่าสูงสุด 10 วินาทีในหนึ่งครั้งที่ดำเนินการอย่างรวดเร็วสำหรับการวนซ้ำ ... อาจจะ 5 มิลลิวินาทีหรือมากกว่านั้น ปัญหาเกิดขึ้นหากผู้ใช้สลับแท็บ ... เช่นบอกว่าฉันมีการปรับเปลี่ยนรูปภาพในคิวสำหรับรูปภาพที่แสดงทันทีที่เปิดใช้งานแท็บ # 4 จากนั้นผู้ใช้จะเปลี่ยนไปใช้แท็บ # 3 อย่างรวดเร็วจากนั้นกลับไปที่แท็บ # 4 ... จากนั้นจะจัดคิวใหม่อีก 10 วินาทีของการแก้ไขในขณะที่คิวเก่ายังคงเล่นอยู่อาจจะอยู่ที่คิวประมาณ 2 หรือ 3 วินาทีหากเปลี่ยนเร็วพอ ... แต่ถึง 5 วินาทีในการ สตรีมมีปัญหา ดังนั้นฉันจึงต้องการวิธียกเลิกการเปลี่ยนแปลงสแต็กเก่าก่อนที่จะใส่สแต็กใหม่ ... ฉันกำลังเขียนข้อความค้นหานี้ในอดีตกาลเนื่องจากฉันได้หาทางเลือกอื่นในการแก้ปัญหานี้โดยการเพิ่มตัวกรองเหตุการณ์ที่มีตาเหยี่ยวในฟังก์ชันการเล่น อย่างไรก็ตามฉันยังคงสงสัยว่าจะสามารถยกเลิกกิจกรรมได้หรือไม่เพราะฉันรู้สึกว่าความรู้ดังกล่าวจะเป็นประโยชน์ในอนาคต ขอบคุณสำหรับความช่วยเหลือใด ๆ ที่แสดง :)

6
ตัวเลือกปุ่ม android
นี่คือตัวเลือกปุ่มที่ปกติจะปรากฏเป็นสีแดงเมื่อกดปุ่มจะปรากฏเป็นสีเทา ฉันอยากจะถามว่าโค้ดสามารถแก้ไขเพิ่มเติมโดยตรงได้อย่างไรเมื่อ PRESSED ขนาดและสีของข้อความก็สามารถเปลี่ยนแปลงได้เช่นกัน ขอบคุณมาก! <item android:state_pressed="true" > <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="2dp" android:color="@color/black" /> <solid android:color="@color/grey"/> <padding android:left="5dp" android:top="2dp" android:right="5dp" android:bottom="2dp" /> <corners android:radius="5dp" /> </shape> </item> <item> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="2dp" android:color="@color/black" /> <solid android:color="#FF6699"/> <padding android:left="5dp" android:top="2dp" android:right="5dp" android:bottom="2dp" /> <corners android:radius="5dp" /> </shape> </item>
115 android  selector 

5
Android: ปุ่ม textColor of disabled ในตัวเลือกไม่แสดง?
ฉันกำลังพยายามสร้างปุ่มด้วยตัวเลือกปุ่มของฉันสามารถมีสถานะดังต่อไปนี้: เปิดใช้งาน / ปิดใช้งาน กด / ไม่กด ตามรัฐดังกล่าวข้างต้น. ฉันต้องการจัดการปุ่มของ: สีข้อความ ภาพพื้นหลัง ปุ่มเริ่มต้นจากการที่ฉันปิดใช้งานดังนั้นควรมี textColor ที่ปิดใช้งานและพื้นหลังปุ่มปิดใช้ แต่ฉันสามารถเห็น textColor เริ่มต้น (ระบุในรูปแบบ) และไม่มีภาพพื้นหลัง! นี่คือ button_selector.xml ตัวเลือกของฉัน <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false" android:state_enabled="false" android:textColor="#9D9FA2" android:drawable="@drawable/button" /> <item android:state_pressed="true" android:state_enabled="true" android:drawable="@drawable/button_pressed"/> <item android:state_pressed="true" android:state_enabled="false" android:textColor="#9D9FA2" android:drawable="@drawable/button"/> <item android:state_pressed="false" android:state_enabled="true" android:drawable="@drawable/button"/> </selector> และนี่คือการประกาศปุ่มของฉันใน layout.xml ของฉัน …

4
เหตุใดส่วนสุดท้ายของชื่อเมธอด Objective-C จึงต้องใช้อาร์กิวเมนต์ (เมื่อมีมากกว่าหนึ่งส่วน)
ใน Objective-C คุณไม่สามารถประกาศชื่อเมธอดโดยที่ส่วนประกอบสุดท้ายไม่รับอาร์กิวเมนต์ ตัวอย่างเช่นต่อไปนี้ผิดกฎหมาย -(void)take:(id)theMoney andRun; -(void)take:(id)yourMedicine andDontComplain; เหตุใด Objective-C จึงออกแบบมาในลักษณะนี้ มันเป็นเพียงสิ่งประดิษฐ์ของ Smalltalk ที่ไม่มีใครเห็นว่าจำเป็นต้องกำจัด? ข้อ จำกัด นี้มีความหมายใน Smalltalk เนื่องจาก Smalltalk ไม่มีตัวคั่นรอบการเรียกใช้ข้อความดังนั้นองค์ประกอบสุดท้ายจะถูกตีความว่าเป็นข้อความที่เป็นเอกภาพของอาร์กิวเมนต์สุดท้าย ยกตัวอย่างเช่นจะแยกวิเคราะห์เป็นBillyAndBobby take:'$100' andRun BillyAndBobby take:('$100' andRun)สิ่งนี้ไม่สำคัญใน Objective-C ที่ต้องใช้วงเล็บเหลี่ยม การสนับสนุนส่วนประกอบตัวเลือกที่ไม่มีพารามิเตอร์จะไม่ช่วยให้เราได้รับประโยชน์มากนักในทุกวิธีการวัดภาษาตามปกติเนื่องจากชื่อวิธีการที่โปรแกรมเมอร์เลือก (เช่นrunWith:แทนที่จะเป็นtake:andRun) ไม่มีผลต่อความหมายเชิงฟังก์ชันของโปรแกรมหรือการแสดงออกของภาษา อันที่จริงโปรแกรมที่มีส่วนประกอบที่ไม่มีพารามิเตอร์นั้นเทียบเท่ากับอัลฟา ดังนั้นฉันจึงไม่สนใจคำตอบที่ระบุว่าคุณลักษณะดังกล่าวไม่จำเป็น (เว้นแต่เป็นเหตุผลที่ระบุไว้ของนักออกแบบ Objective-C ไม่มีใครรู้จัก Brad Cox หรือ Tom Love พวกเขามาที่นี่หรือไม่) หรือที่พูดว่า วิธีการเขียนชื่อเมธอดเพื่อไม่ให้คุณลักษณะนี้จำเป็น ประโยชน์หลักคือความสามารถในการอ่านและความสามารถในการเขียน (ซึ่งก็เหมือนกับความสามารถในการอ่านเพียง ... คุณรู้) เนื่องจากจะหมายความว่าคุณสามารถเขียนชื่อวิธีการที่คล้ายกับประโยคภาษาธรรมชาติได้ …

10
iOS - วิธีใช้ performSelector ที่มีหลายอาร์กิวเมนต์และด้วย afterDelay?
ฉันเป็นมือใหม่ iOS ฉันมีวิธีการเลือกดังนี้ - - (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second { } ฉันกำลังพยายามใช้สิ่งนี้ - [self performSelector:@selector(fooFirstInput:secondInput:) withObject:@"first" withObject:@"second" afterDelay:15.0]; แต่นั่นทำให้ฉันมีข้อผิดพลาดว่า - Instance method -performSelector:withObject:withObject:afterDelay: not found มีความคิดเกี่ยวกับสิ่งที่ฉันขาดหายไปหรือไม่?

6
เมื่อใดควรใช้ @objc ใน Swift
ใน Swift ฉันเห็นวิธีการบางอย่างเช่น: @objc private func doubleTapGestureRecognized(recognizer: UITapGestureRecognizer) ฉันสงสัยว่าเมื่อใดควรใช้ @objc? ฉันอ่านเอกสารบางฉบับ แต่พวกเขากำลังบอกว่าเมื่อคุณต้องการให้เรียกได้ใน Objective-C คุณควรเพิ่มแฟล็ก @objc อย่างไรก็ตามนี่เป็นฟังก์ชั่นส่วนตัวใน Swift @obj ทำอะไร?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.