2012-11-18 22 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中可用。你可以在這裏設置自己爲代表。