0

首先非常感谢您的帮助。

我是 ios 开发的新手,我想更新进度条,但它不起作用。

这有效并且进度条得到更新:

dispatch_async(dispatch_get_main_queue(), ^(void){
      [self.progressBar setProgress:[self.progressBar progress]+1 animated:YES];
      NSLog(@"PROGRESS:%f",[self.progressBar progress]);
  });
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

这不起作用,并且该块不显示日志。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        dispatch_async(dispatch_get_main_queue(), ^(void){
            [self.progressBar setProgress:[self.progressBar progress]+1 animated:YES];
            NSLog(@"PROGRESS:%f",[self.progressBar progress]);
        });

除此之外,我从dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^(void)方法调用这个函数

我还没有找到任何解决方案。有人知道这种奇怪的行为吗?

------------- 已更新为完整代码 --------

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self performSelector:@selector(downloadInfo:) withObject:nil afterDelay:0.5];
}

-(void) downloadInfo:(id) sender {
    NTSessionVariables *sharedManager = [NTSessionVariables sharedManager];
    NSString *token = [sharedManager token];

    if (token != nil) {
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", URL_SERVER, URL]];
        NSDictionary *json = [NTJSONUtils getJSONWithImei:@"123456789" AndToken:token];
        NSDictionary *resultLogin = [NTHttpUtils sendHTTPPostWithURL:url AndJSON:json];

        if ([[[resultLogin objectForKey:@"operacion"] objectForKey:@"error"] isEqualToString:@""]) {
            NSString *bodyString = [NTJSONUtils decryptBody:[[resultLogin objectForKey:@"operacion"] objectForKey:@"body"] AndKey:token];
            //Save in memory
            [NTSharedPrefs saveStringToUserDefaults:bodyString withKey:PLANS];


            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
                [self reallyCreateDirectories:@{ @"bodyString" : bodyString, @"token" : token }];
            });

        }



    }

}

- (void)reallyCreateDirectories:(NSDictionary *)dict
{
    [self createDirectories:dict[@"bodyString"] AndToken:dict[@"token"]];
}

-(void) createDirectories: (NSString*) bodyString AndToken:(NSString*) token{
    NSData *jsonData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *e;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&e];

    NSArray *list = [json objectForKey:@"list"];
    NSFileManager *filemgr;

    filemgr = [NSFileManager defaultManager];
    float progress = 1.0f / [list count];
    for (int i=0; i< [list count]; i++) {
        NSDictionary *plan = [list[i] objectForKey:@"plan"];
        NSNumber *idPlan = [plan objectForKey:@"idplan"];
        NSString *company = [plan objectForKey:@"company"];

        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        dispatch_async(dispatch_get_main_queue(), ^(void){
            [self.progressBar setProgress:[self.progressBar progress]+1 animated:YES];
            NSLog(@"PROGRESS:%f",[self.progressBar progress]);
        });
        NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
        NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"/DOC/%@",idPlan]];
        NSURL *dir = [NSURL fileURLWithPath:path];
        if ([filemgr createDirectoryAtURL: dir withIntermediateDirectories:YES attributes: nil error:nil] == YES) {
            //Creamos los ficheros
            NSString *jsonPlanString = [NTJSONUtils jsonToStringWithDictionary:flightplan];
            if ([filemgr createFileAtPath:[path stringByAppendingString:@"/data.json"] contents:[jsonPlanString dataUsingEncoding: NSUTF8StringEncoding] attributes:nil] == YES) {
                NSLog(@"File Created");
            }else{
                NSLog(@"plan not created");
            }

            //Create Directories
            NSURL *urlDir = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", URL_SERVER, URL_DOCUMENT]];
            NSDictionary *jsonDir = [NTJSONUtils getCompleteStructure:@"123456789" AndToken:token AndName:company AndIdPlan:(NSString *)idPlan];
            NSDictionary *resultDir = [NTHttpUtils sendHTTPPostWithURL:urlDir AndJSON:jsonDir];

            if ([[[resultDir objectForKey:@"operacion"] objectForKey:@"error"] isEqualToString:@""]) {
                NSString *bodyString = [NTJSONUtils decryptBody:[[resultDir objectForKey:@"operacion"] objectForKey:@"body"] AndKey:token];
                [self createDirectoriesWithPlan:bodyString AndPath:path AndToken:token AndIdPlan:idPlan.stringValue AndName:company];

            }       
        }
    }

}
4

0 回答 0