2012-03-31 37 views
5

Tôi đang xây dựng hệ thống đăng nhập trong ứng dụng của mình sẽ được gọi nhiều lần. Vì vậy, thay vì sao chép và dán mã vào một số điểm, tôi tất nhiên tạo ra một lớp NSObject để tôi có thể gọi lớp khi cần thiết, thay vào đó.Hiển thị UIAlertView trong NSObject Lớp

Hệ thống đăng nhập sẽ hiển thị UIAlertView và khi "OK" được nhấn, hệ thống sẽ cố gắng đăng nhập. Tôi có thể gọi lớp và UIAlertView sẽ hiển thị, nhưng tôi không thể biết nút nào được nhấn. Đây là mã của tôi:

//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 

Còn bây giờ, trước khi tôi đặt UITextFields trong giao diện, tôi chỉ muốn ứng dụng biết nút nào đã được khai thác. Testing xuất hiện trong nhật ký, nhưng không xuất hiện Here hoặc Tapped. Cảm ơn!

+2

Không ghi đè '+ (void) initialize' !!!! '+ initialize' là ** nhiều ** khác với' -init'! Bạn cần phải chắc chắn rằng bạn đang gọi một cách thích hợp 'siêu 'là tốt. Hơn nữa, hãy chắc chắn rằng bạn đang làm theo hướng dẫn MVC. Thường các đối tượng mô hình không được hiển thị các phần tử giao diện người dùng. –

+0

Jack Lawrence nói đúng: ai là người tự đại diện UIAlertView? nó thậm chí không được khởi tạo, đó là cách nó không được gọi là đại biểu. –

+1

Các bạn đã đúng! Tôi đã không làm điều này trước đây, vì vậy tôi đã thay đổi + (void) khởi tạo thành - (id) init và nó hoạt động. Jack Lawrence: viết bình luận của bạn như một câu trả lời để tôi có thể đánh dấu bạn đúng. –

Trả lời

1

Chế độ xem cảnh báo của bạn không được gọi bằng phương thức lớp + (void) khởi tạo nhưng theo phương thức init (instance) instance đó là lý do tại sao cá thể của bạn không nhận được thông báo.

phương thức lớp "+ (void) khởi tạo" được gọi khi lớp tải đầu tiên.

phương pháp thể hiện "- (id) init" có tên của nó bắt đầu bằng init và được gọi khi bạn tạo (khởi tạo) đối tượng của bạn.

-(id)init { 

    //alert view 

    self = [super init]; 

    return self; 

} 
+0

Cảm ơn sự giúp đỡ của bạn. Đối với những người đọc câu trả lời này: thay đổi + (void) khởi tạo thành - (id) init. –

+0

được cải thiện theo nhận xét của @JackLawrence – moxy

0

Chỉ

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

Khi bạn sử dụng self trong một phương pháp lớp học mà bạn đang đề cập đến các lớp chính nó, chứ không phải là một thể hiện của lớp. Tuy nhiên, phương thức ủy nhiệm của bạn là một phương thức cá thể. Bạn có thể muốn người gọi tạo một cá thể đăng nhập và có cá thể tạo ra cảnh báo, cộng với là ủy nhiệm của nó.

0

Đó là đơn giản:

Tạo một tài sản cho lớp NSObject của bạn theo quan điểm của bạn điều khiển lớp:

trong h file:

@property (nonatomic, giữ lại) LoginCheckNSObject * LoginCheckerObject;

trong tập tin m:

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

@ Jack Humphries, thêm nó vào lớp trình điều khiển chế độ xem của bạn. Đó là nó – SathishKumarEro

Các vấn đề liên quan