2012-03-31 12 views
5

में एक UIAlertView प्रदर्शित करें मैं अपने ऐप के भीतर एक लॉगिन सिस्टम बना रहा हूं जिसे कई बार बुलाया जाएगा। तो कोड को कई स्थानों पर कॉपी करने और चिपकाने की बजाय, मैं निश्चित रूप से एनएसओब्जेक्ट क्लास बना रहा हूं, इसलिए जब आवश्यक हो, तो मैं कक्षा को कॉल कर सकता हूं।NSObject क्लास

लॉगिन सिस्टम एक यूआईएलर्टव्यूव प्रदर्शित करेगा, और जब "ओके" टैप किया जाएगा, तो सिस्टम लॉग इन करने का प्रयास करेगा। मैं कक्षा को कॉल कर सकता हूं और यूआईएलर्टव्यू दिखाएगा, लेकिन मैं नहीं बता सकता कि कौन से बटन टैप किए गए हैं।

//Calling the login system 

Login *login = [[Login alloc] init]; 

Login.h:

#import <Foundation/Foundation.h> 

@interface Login : NSObject <UIAlertViewDelegate> { 

} 

@end 

Login.m: यहाँ मेरी कोड है

#import "Login.h" 

@implementation Login 

+(void)initialize { 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; 

    [alert show]; 
    [alert release]; 

    NSLog(@"Testing"); 

} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 

    NSLog(@"Here"); 

    NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; 

    if([title isEqualToString:@"OK"]) { 

     NSLog(@"Tapped"); 

    } 

} 

@end 

अभी के लिए, इससे पहले कि मैं ध्यान में रखते हुए UITextFields शब्दों में कहें, मैं बस ऐप को यह जानना है कि कौन सा बटन टैप किया गया था। Testing लॉग में दिखाई देता है, लेकिन न तो Here और न ही Tapped दिखाई देता है। धन्यवाद!

+2

ओवरराइड न करें '+ (शून्य) initialize' !!!! 'प्रारंभ करें' ** ** ** ** से अधिक ** अलग है! आपको यह सुनिश्चित करने की ज़रूरत है कि आप उचित रूप से 'सुपर' को भी बुला रहे हैं। इसके अलावा, सुनिश्चित करें कि आप एमवीसी दिशानिर्देशों का पालन कर रहे हैं। आम तौर पर मॉडल ऑब्जेक्ट्स को UI तत्व प्रदर्शित नहीं करना चाहिए। –

+0

जैक लॉरेंस सही है: स्वयं कौन है कि यह एक यूआईएलर्टव्यू प्रतिनिधि है? इसे प्रारंभ भी नहीं किया गया है, इस तरह इसे प्रतिनिधि के रूप में नहीं कहा जाता है। –

+1

आप लोग सही हैं! मैंने पहले ऐसा नहीं किया है, इसलिए मैंने + (शून्य) प्रारंभ किया - (आईडी) init और यह काम किया। जैक लॉरेंस: अपनी टिप्पणी को उत्तर के रूप में लिखें ताकि मैं आपको सही तरीके से चिह्नित कर सकूं। –

उत्तर

1

आपका अलर्ट व्यू क्लास विधि + (शून्य) द्वारा प्रारंभ नहीं किया जाना चाहिए, लेकिन उदाहरण के द्वारा - (आईडी) init विधि इसलिए आपका उदाहरण अधिसूचनाएं प्राप्त नहीं करता है।

वर्ग विधि "+ (शून्य) प्रारंभिक" कक्षा को पहली बार लोड होने पर बुलाया जाता है।

उदाहरण विधि "- (आईडी) init" का नाम init द्वारा शुरू होता है, और जब आप अपनी ऑब्जेक्ट बनाते हैं (तत्काल) कहते हैं।

-(id)init { 

    //alert view 

    self = [super init]; 

    return self; 

} 
+0

आपकी मदद के लिए धन्यवाद। इस उत्तर को पढ़ने वाले लोगों के लिए: + (शून्य) प्रारंभ करें - (आईडी) init। –

+0

@ जैक लॉरेंस टिप्पणी – moxy

0

बस

switch(buttonIndex){ 
    case 0: 
     NSLog(@"Tapped First Button"); 
     break; 
    case 1: 
     break; 
    default: 
     break; 
} 
0

आप एक वर्ग विधि आप कक्षा में ही है, बजाय वर्ग का एक उदाहरण का जिक्र कर रहे हैं में self का उपयोग करते हैं। हालांकि, आपकी प्रतिनिधि विधि एक उदाहरण विधि है। आप शायद कॉलर को लॉग इन इंस्टेंस बनाना चाहते हैं और इंस्टेंस को अलर्ट बनाते हैं, साथ ही इसके प्रतिनिधि बनें।

0

यह सरल है:

ज फ़ाइल में

:

आपके विचार नियंत्रक कक्षा में अपने NSObject वर्ग के लिए एक प्रॉपर्टी बनाएं

@property (nonatomic, को बनाए रखने) LoginCheckNSObject * LoginCheckerObject;

मीटर फ़ाइल में:

self.LoginCheckerObject=[[LoginCheckNSObject alloc] init]; 
[self.LoginCheckerObject setDelegate:self]; 
[self.LoginCheckerObject TrackNowLogin]; 
+0

@ जैक हम्फ्रीज़ के अनुसार सुधार हुआ, इसे अपने व्यू कंट्रोलर क्लास में जोड़ें। बस – SathishKumarEro

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