作業コードはありますが、より良いアプローチがある場合、または現在のアプローチを使用して問題が発生する場合は、アドバイス/指示が必要です。MBProgressHUD は viewDidLoad で始まります。その後、応答をポストして受信する JSON メソッドがあります。画面上のラベルを変更するための情報が必要なため、これは同期タスクです。JSON メソッドの最後に、MBProgressHUD を停止するための呼び出しがあります。
私のviewDidLoad
:
- (void)viewDidLoad
{
[super viewDidLoad];
//some code missing
//start loading
MBProgressHUD * hud = [MBProgressHUD showHUDAddedTo: self.view animated:YES] ;
hud.labelText =@"Loading Information";
hud.detailsLabelText=@"Please wait.";
hud.dimBackground = YES;
}
私のviewDidAppear
:
-(void) viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];
[self getJSON];
}
私のgetJSON
方法:
-(void) JSON{
//post
NSMutableString * postString = [NSMutableString stringWithString:homeUrl];
[postString appendString:[NSString stringWithFormat:@"?%@=%@",@"email",self.email]];
[postString appendString:[NSString stringWithFormat:@"&%@=%@",@"pass",self.pass]];
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:postString]];
[request setHTTPMethod:@"POST"];
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
//get response
NSString * requestST = [[request URL] absoluteString];
NSData * jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:requestST]];
NSError *error;
//added check
if (jsonData!=nil) {
NSDictionary * dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
self.status = [dataDictionary objectForKey:@"status"];
self.balance = [dataDictionary objectForKey:@"result"];
//check status
if ([self.status isEqualToString:@"fail"]) {
NSLog(@"Fail")
}
else{
//assign variables
}
}
//if JSON is NIL
else{
NSLog(@"JSON Data is NIL");
}
//finish loading
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];
}
アプリのアーキテクチャは次のとおりです。
HOME-->ログイン-->会員登録
したがって、クラッシュするため、JSON 呼び出しの Home メソッドで viewDidLoad を使用できません。popToRootViewController
ログインが成功したときに使用します。なぜ私が JSON 呼び出しに viewWillAppear を使用するのかと尋ねられる場合に備えて。代替案があれば、遠慮なく提案してください:)