2011-07-31 10 views
1

私はiPhone用のタブバーベースのアプリケーションを開発しています。私が実装されたプロトコルを持っているモーダルビューLoginViewController.h(子)内のログでは目的c:プロトコル+モデムビューのログインフォームからタブバーコントローラビューにデータを戻す代理人

- (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; } 

:アプリを実行すると、私がログインフォームでモーダルビューを投げるとき: 流れは次のとおりです。ユーザーがフォームを記入するとき

@protocol PassUserInfoDelegate <NSObject> 
@required 
- (void) passUserInfo: (NSString *)string; 
@end 

、私はNSURLConnectionを作成し、connectionDidFinishLoading方法でIは、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に私はプロトコルメソッドを実装:

- (void) passUserInfo:(NSString *)jSonString 
{ 
    userName.text = [[NSString alloc] initWithFormat:@"Welcome %@", jSonString]; 
} 

をしてviewDidAppear方法で、私はLOGINSUCCESSを呼び出します

-(void) viewDidAppear:(BOOL)animated{ 
protocolTest = [[LoginViewController alloc] init]; 
[protocolTest setDelegate:self]; 
[protocolTest loginSuccess]; 
} 

LOGINSUCCESS方法はLoginViewControllerクラスに実装LoginViewControllerクラスで実装する方法:

であり、idJson値をHomeViewController(親)に渡す必要があります。 問題は、私がモーダルビューフォームを閉じると、idJson値が "NIL"であるため、HomeViewControllerでこの値を取得できないということです。私が代わりにこの作る場合:

[[self delegate] passUserInfo:@"hello"]; 

を私は私が間違っているのは何HomeViewController(親) でハロー文字列を取得します?

ありがとうございます!!!

答えて

1

実際のデータを持つ既存のLoginViewControllerを使用するのではなく、問題があります。あなたのviewWillAppearは、接続と空のデータを取得したことのない新しいものを作成しています。

まず、アプリケーション代理人のHomeViewController(タブバーのもの)を、提示しているLoginViewControllerの代理人に設定する必要があります。

次に、connectionDidFinishLoading:から、[delegate passUserInfo:idJson];に電話をかけて、HomeVCにログイン画面にデータがあることを通知する必要があります。 HomeVCpassUserInfo:メソッドは、おそらくLoginVC[self.tabBarController dismissModalViewControllerAnimated:YES];で棄却するべきです(ログインビューはタブバーコントローラから提示されているため)。

+0

ありがとう@thelaws !!私は最初の部分を解決した、私はあなたの手順を実行し、私はidJson値のものを解決した!これで、passUserInfoメソッドでidJson値を取得できます。機能していないのは、最後のことです。これは、passUserInfoメソッドからモーダルビューを取り除くことです。それは単にビューを閉じず、Xcodeはデバッグエラーをスローしません。 – Ruben

+0

loginVCのconnectionDidFinishLoadingメソッドからpassUserInfoメソッドを呼び出した後、モーダルビューを解除する方が良いでしょうか? – Ruben

+0

私はLoginVCには、それを解除する必要があるtabbarcontrollerのインスタンスが必要です。あなたはおそらくあなたがそれを簡単に却下することができるようにhomevcからloginvcを提示することができます。 – thelaws

関連する問題