私はiPhone用のタブバーベースのアプリを開発しています。フローは次のとおりです。アプリを実行すると、ログインフォームを使用してモーダルビューを表示します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
tabBarController.delegate = self;
// Add the tab bar controller's view to the window and display.
self.window.rootViewController = self.tabBarController;
[self addTabBarArrow];
LoginViewController *loginViewController = [[LoginViewController alloc] init];;
[window addSubview:tabBarController.view];
[self.tabBarController presentModalViewController:loginViewController animated:YES];
[window makeKeyAndVisible];
return YES; }
ログインモーダルビューLoginViewController.h(子)にプロトコルが実装されています:
@protocol PassUserInfoDelegate <NSObject>
@required
- (void) passUserInfo: (NSString *)string;
@end
ユーザーがフォームに入力したら、NSURLConnectionを作成し、connectionDidFinishLoadingメソッドでJSONリクエストからユーザー値を取得します。
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSString *respuestaServidor = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
self.responseData = nil;
NSDictionary *dictionary = [respuestaServidor JSONValue];
idJson = [dictionary objectForKey:@"id"];
NSString *user_loginJson = [dictionary objectForKey:@"user_login"];
if ([idJson isEqualToString:@"null"] && [user_loginJson isEqualToString:@"null"]) {
NSLog(@"Login incorrecto");
} else {
NSLog(@"Procedo a loguear usuario");
}
[indicator stopAnimating];
[indicator release];
}
HomeViewController.h(親)に委任があります:
@interface HomeViewController : UIViewController <PassUserInfoDelegate> {
LoginViewController *protocolTest;
IBOutlet UILabel *nombreUsuario;
NSString *usuario;
}
@property (nonatomic, retain) IBOutlet UILabel *nombreUsuario;
@property (copy) NSString *usuario;
- (void) passUserInfo:(NSString *)string;
@end
そして、HomeViewController.mで、Protocolメソッドを実装します。
- (void) passUserInfo:(NSString *)jSonString
{
userName.text = [[NSString alloc] initWithFormat:@"Welcome %@", jSonString];
}
そして、viewDidAppearメソッドで、LoginViewControllerクラスに実装されているloginSuccessメソッドを呼び出します。
-(void) viewDidAppear:(BOOL)animated{
protocolTest = [[LoginViewController alloc] init];
[protocolTest setDelegate:self];
[protocolTest loginSuccess];
}
LoginViewControllerクラスに実装されたloginSuccessメソッド:
- (void)loginSuccess
{
[[self delegate] passUserInfo:idJson];
}
そして、idJson値をHomeViewController(親)に渡す必要があります。問題は、モーダルビューフォームを閉じると、idJson値が「NIL」であるため、HomeViewControllerでこの値を取得できないことです。代わりにこれを作成した場合:
[[self delegate] passUserInfo:@"hello"];
HomeViewController(親)でhello文字列を取得します何が間違っていますか?
前もって感謝します!!!