我的应用程序有一个登录页面,人们需要输入密码,然后他们可以登录到里面。在我将它提交给iTuneConnect之前,我的应用程序的所有内容都可以在我的iPhone上运行,然后它已被Apple批准。当我从app商店下载它时发生了一些事情。 HUD的状态总是加载......它无法登录到内部。
这是我的简单代码:
@synthesize threadCount = _threadCount;
- (void) initData
{
_codeIsVaild = NO;
}
- (IBAction)Login:(id)sender
{
_threadCount = 0;
//Login procedure
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeIndeterminate;
hud.labelText = @"Loading...";
[hud showAnimated:YES whileExecutingBlock:^{
[self getData];
while (_threadCount != 5) {
//Waiting for all tasks complete...It will be pass when the threads counter is equal 5
}
} completionBlock:^{
if (_codeIsVaild)
{
//Password is Vaild
[self performSegueWithIdentifier:@"loginsegue" sender:self];
}
else
{
//Show error Alert
}
[hud removeFromSuperview];
}];
}
}
-(void) getData
{
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
NSString *URLString = [APILink getData];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
[manager POST:URLString parameters:paras
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
//Tasks
[self taskone];
[self tasktwo];
[self taskthree];
[self taskfour];
[self taskfive];
_codeIsVaild = YES;
}
else
{
_codeIsVaild = NO;
}
dispatch_semaphore_signal(semaphore);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
_codeIsVaild = NO;
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
}
-(void) taskone
{
NSString *URLString = [APILink taskoneAPIurl];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
[manager POST:URLString parameters:paras
success:^(AFHTTPRequestOperation *operation, id responseObject) {
_threadCount += 1;
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
_threadCount += 1;
}];
}
//Same as taskone,but get data from another url
-(void) taskTwo
-(void) taskThree
-(void) taskFour
-(void) taskFive
我认为问题是异步任务管理。如果是这种情况,我的所有手机都无法登录。最奇怪的是,在我上传到应用程序商店之前,它在我的手机上运行正常,但是当我从应用程序商店下载它时,它无法正常工作。我能做什么?谢谢大家。
答案 0 :(得分:1)
最后,我找到了一个解决方案,请参阅网址:How to batch request with AFNetworking 2?
这表明代码不能等待几个请求的结果,使用无限循环来等待。
你应该使用dispatch_group_t& dispatch_group_notify
感谢CirrusFlyer&大家好!
祝你有个美好的一天!
答案 1 :(得分:0)
我必须通过调试器观看才能提供任何真正的帮助,但听起来你并没有超越getData()方法或者你的while循环的停止条件是从来没有见过(我的钱在后面,因为它似乎没有一个线程安全的变量开始......如果你的终止条件是基于它的话,这是一个很大的禁忌。)
作为建议,您可能需要添加一些日志记录 - 您可以使用的东西 - 除了确保没有竞争条件外,还可用于调试目的。