2012-11-18 23 views
0

我的应用程序的登陆页面是一个UITableView,它有菜单选项列表(menu.h,menu.m)。在菜单的ViewDidAppear中,m,应用程序检查用户是否登录,并通过Modal登录表单(Login.h,Login.m)进行登录。在模态登录表单中,单击登录时,委托方法得到执行,但值不会被传递。将不胜感激,如果我失去了一些东西@Protocol&Delegate - 调用委托方法,但值不会传递给父窗体

一)类LoggedInUserDetails

A1)类LoggedInUserDetails.h

#import <UIKit/UIKit.h> 
@interface LoggedInUserDetails : NSObject 

@property (nonatomic, copy) NSString *isSuccessfullyLoggedIn; 
@property (nonatomic, copy) NSString *login; 

@end 

A2)LoggedInUserDetails.m

#import "LoggedInUserDetails.h" 
@implementation LoggedInUserDetails 

@synthesize isSuccessfullyLoggedIn; 
@synthesize login; 

@end 

B)Login.h & Login.m

b1)Login.h

#import <UIKit/UIKit.h> 
@class Login; 
@class LoggedInUserDetails; 

@protocol LoginDelegate <NSObject> 
- (void) login:(Login *)controller GetLoggedInUserDetails:(LoggedInUserDetails *)loggedinuserdetails; 
@end 

@interface Login : UIViewController 

@property (nonatomic, weak) id <LoginDelegate> delegate; 

- (IBAction)actnLogin:(id)sender; 
- (IBAction)actnLogout:(id)sender; 

@end 

B2)Login.m

#import "Login.h" 
#import "menu.h" 

@interface Login() 

@end 

@implementation Login 
@synthesize delegate; 


- (IBAction)actnLogin:(id)sender { 
    //[self.delegate didReceiveMessage:@"YES"]; 
    LoggedInUserDetails *loggedinuserdetails = [[LoggedInUserDetails alloc] init]; 
    loggedinuserdetails.login = @"MCONNLEY"; 
    loggedinuserdetails.isSuccessfullyLoggedIn = @"YES"; 
    // The line below is getting executed while checking in debug mode but 
    // doesnot go to menu.m with the result the login form is constantly shown 
    [self.delegate login:self GetLoggedInUserDetails:loggedinuserdetails]; 
} 

c)中Menu.h & Menu.m

C1)Menu.h

#import <UIKit/UIKit.h> 
#import "Login.h" 
#import "LoggedInUserDetails.h" 

@interface menu : UITableViewController <LoginDelegate> 

@property (strong, nonatomic) NSArray *menuList; 
@property (nonatomic, strong) LoggedInUserDetails *userDetails; 

@end 

C2)Menu.m

#import "menu.h" 

@interface menu() 

@end 

@implementation menu 
@synthesize menuList; 
@synthesize userDetails; 

- (void) viewDidAppear:(BOOL)animated { 
    if (![userDetails.isSuccessfullyLoggedIn isEqualToString:@"YES"]) { 
     [self performSegueWithIdentifier:@"LoginSegue" sender:self]; 
    }  

} 

- (void) login:(Login *)controller GetLoggedInUserDetails:(LoggedInUserDetails *)loggedinuserdetails { 
    userDetails = loggedinuserdetails; 
    IstheUserLoggedIn.text = userDetails.isSuccessfullyLoggedIn; 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+1

您似乎没有在任何地方设置委托。我希望在prepareForSegue中看到这一点。 – jrturton

+0

刚刚在menu.m中添加了这个。仍然没有工作。 - (无效)prepareForSegue:(UIStoryboardSegue *)赛格瑞发件人:(ID)发送方 { \t如果([segue.identifier isEqualToString:@ “LoginSegue”]) \t { \t \t登录*登录= [[登录的alloc]在里面]; \t \t login.delegate = self; \t} } – user1509593

+0

请勿创建新的“登录”!使用segue.destinationViewController – jrturton

回答

0

您似乎没有在任何地方设置委托。我希望在prepareForSegue中看到这一点。

即将出现的视图控制器将在segue.destinationViewController中可用。你可以在这里设置自己为代表。