异步 - 当我从应用程序商店下载时,我的应用程序无法运行?

时间:2014-06-30 10:40:31

标签: ios objective-c asynchronous app-store grand-central-dispatch

我的应用程序有一个登录页面,人们需要输入密码,然后他们可以登录到里面。在我将它提交给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   

我认为问题是异步任务管理。如果是这种情况,我的所有手机都无法登录。最奇怪的是,在我上传到应用程序商店之前,它在我的手机上运行正常,但是当我从应用程序商店下载它时,它无法正常工作。我能做什么?谢谢大家。

2 个答案:

答案 0 :(得分:1)

最后,我找到了一个解决方案,请参阅网址:How to batch request with AFNetworking 2?

这表明代码不能等待几个请求的结果,使用无限循环来等待。

你应该使用dispatch_group_t& dispatch_group_notify

感谢CirrusFlyer&大家好!

祝你有个美好的一天!

答案 1 :(得分:0)

我必须通过调试器观看才能提供任何真正的帮助,但听起来你并没有超越getData()方法或者你的while循环的停止条件是从来没有见过(我的钱在后面,因为它似乎没有一个线程安全的变量开始......如果你的终止条件是基于它的话,这是一个很大的禁忌。)

作为建议,您可能需要添加一些日志记录 - 您可以使用的东西 - 除了确保没有竞争条件外,还可用于调试目的。