मैंने बहुत सी चीजों की कोशिश की, फिर भी कोई परिणाम नहीं।UIButton addTarget: action: forControlEvents: परिणाम [NSObject doesNotRecognizeSelector:]
तो मैं है UIViewController का एक उपवर्ग में प्रोग्राम के बनाए गए निम्न बटन:
rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
rightButton.frame = CGRectMake(0.0, 0.0, 110.0, 40.0);
rightButton.titleLabel.font = [UIFont fontWithName:GAME_FONT_NAME_STRING size:20.0];
[rightButton setTitle:@"MyTitle" forState:UIControlStateNormal];
rightButton.backgroundColor = [UIColor clearColor];
[rightButton setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
[rightButton setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
[rightButton setBackgroundImage:normalImage forState:UIControlStateNormal];
[rightButton setBackgroundImage:highlightedImage forState:UIControlStateHighlighted];
[rightButton addTarget:self action:@selector(myButton) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:rightButton];
जहां चयनकर्ता है:
- (void)myButton;
मैं सब कुछ करने की कोशिश की:
- (void)myButton;
- (void)myButton:(id)sender;
- (void)myButton:(id)sender forEvent:(UIEvent *)event;
- (IBAction)myButton;
- (IBAction)myButton:(id)sender;
- (IBAction)myButton:(id)sender forEvent:(UIEvent *)event;
और संबंधित चयनकर्ता, ज़ाहिर है:
[rightButton addTarget:self action:@selector(myButton) forControlEvents:UIControlEventTouchUpInside];
[rightButton addTarget:self action:@selector(myButton:) forControlEvents:UIControlEventTouchUpInside];
[rightButton addTarget:self action:@selector(myButton:forEvent:) forControlEvents:UIControlEventTouchUpInside];
[rightButton addTarget:self action:@selector(myButton) forControlEvents:UIControlEventTouchUpInside];
[rightButton addTarget:self action:@selector(myButton:) forControlEvents:UIControlEventTouchUpInside];
[rightButton addTarget:self action:@selector(myButton:forEvent:) forControlEvents:UIControlEventTouchUpInside];
परिणाम हमेशा एक अपवाद अपवाद है - [NSObject करता हैNotRecognizeSelector:]। हालांकि, कार्यक्रम का सामान्य बैकट्रैक है:
#0 0x92a6bedb in objc_msgSend()
#1 0x03b0a430 in ??()
#2 0x00306b4e in -[UIControl sendAction:to:forEvent:]()
#3 0x00308d6f in -[UIControl(Internal) _sendActionsForEvents:withEvent:]()
#4 0x00307abb in -[UIControl touchesEnded:withEvent:]()
#5 0x002bcddf in -[UIWindow _sendTouchesForEvent:]()
#6 0x002a67c8 in -[UIApplication sendEvent:]()
#7 0x002ad061 in _UIApplicationHandleEvent()
#8 0x02498d59 in PurpleEventCallback()
#9 0x01cabb80 in CFRunLoopRunSpecific()
#10 0x01caac48 in CFRunLoopRunInMode()
#11 0x02497615 in GSEventRunModal()
#12 0x024976da in GSEventRun()
#13 0x002adfaf in UIApplicationMain()
तो उस बटन के साथ समस्या क्या है?
पुनश्च: मैं iPhone SDK 3.1.3
अद्यतन उपयोग कर रहा हूँ!
AppDelegate में निम्न कोड (इंटरफ़ेस में कोई घोषणाओं): पूरी तरह से
- (void)applicationDidFinishLaunching:(UIApplication *)application {
UIButton *test = [[UIButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 100.0)];
[test setTitle:@"Title" forState:UIControlStateNormal];
UIImage *bg = [UIImage imageNamed:...];
[test setBackgroundImage:bg forState:UIControlStateNormal];
[test addTarget:self action:@selector(testAction) forControlEvents:UIControlEventTouchUpInside];
[window addSubview:test];
[test release];
[window makeKeyAndVisible];
}
- (void)testAction {
NSLog(@"Write something...");
}
काम करता है!
लेकिन अगर मैं एक ही कोड के साथ एक खाली UIViewController बनाएँ:
- (void)viewDidLoad {
UIButton *test = [[UIButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 100.0)];
[test setTitle:@"Title" forState:UIControlStateNormal];
UIImage *bg = [UIImage imageNamed:...];
[test setBackgroundImage:bg forState:UIControlStateNormal];
[test addTarget:self action:@selector(testAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:test];
[test release];
[window makeKeyAndVisible];
}
- (void)testAction {
NSLog(@"Write something...");
}
मैं इस रहस्यमय त्रुटि मिलती है। :-(मदद
एआरसी पेश करने के बाद, समाधान थोड़ा अलग है। अब आपको हेडर फ़ाइल में UIViewController * नियंत्रक घोषित करने की आवश्यकता है। तो यह कक्षा का एक सदस्य चर है और यह आंतरिक रूप से बनाए रखा है। बस एआरसी का उपयोग करने के रूप में रिलीज को कॉल न करें जैसा कि आप जानते हैं। –