我有工作代码,但如果有更好的方法或者使用我当前的方法会出现问题,我需要建议/指导。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];
}
该应用程序的架构如下:
首页-->登录-->注册
因此我不能在 JSON 调用的 Home 方法中使用 viewDidLoad,因为它会崩溃。我popToRootViewController
在成功登录时使用。以防有人问我为什么使用 viewWillAppear 进行 JSON 调用。如果有任何替代方案,请毫不犹豫地提出建议:)