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];
}
您似乎沒有在任何地方設置委託。我希望在prepareForSegue中看到這一點。 – jrturton
剛剛在menu.m中添加了這個。仍然沒有工作。 - (無效)prepareForSegue:(UIStoryboardSegue *)賽格瑞發件人:(ID)發送方 { \t如果([segue.identifier isEqualToString:@ 「LoginSegue」]) \t { \t \t登錄*登錄= [[登錄的alloc]在裏面]; \t \t login.delegate = self; \t} } – user1509593
請勿創建新的「登錄」!使用segue.destinationViewController – jrturton