目标C在api调用后设置标签

时间:2016-11-14 22:01:48

标签: ios objective-c http asynchronous

更新

我正在进行api调用getPacks()并成功获取两个变量_numberOfPacks和_numberOfAutoRefills的值。

但是,当我尝试将其放入标签时,它会失败,并将输出设为(null)Packs& (null)Autorefiils

按以下顺序进行调用:

  1. getpacks()------- first(它将_numberOfPacks和_numberOfAutoRefills上的值设置为全局变量

  2. drawQuantity()-----在标签上设置_numberOfPacks和_numberOfAutoRefills。

  3. -(void) getPacks: (IHPlacedOrder*)order{
    
    NSOperationQueue *networkQueue = [[NSOperationQueue alloc] init];
    networkQueue.maxConcurrentOperationCount = 5;
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://XXXXXXX.XXXXX/%@",order.ID]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]
                                         initWithRequest:request];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    
        if([string isEqualToString:@""]){
    
        } else {
    
            NSMutableDictionary *dict=[NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:nil];
    
            NSLog(@"%@",dict);
    
            _numberOfPacks = [[dict objectForKey:@"prescription_interval"] valueForKey:@"quantity_per_interval"];
            _numberOfAutoRefills = [[dict objectForKey:@"prescription_interval"]valueForKey:@"num_intervals"];
    
            NSLog(@"PACKS:%@ , AUTOREFILLS:%@",_numberOfPacks,_numberOfAutoRefills);
    
            _quantity.text = [NSString stringWithFormat: @"%@,%@",_numberOfPacks,_numberOfAutoRefills];
    
        }
    
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"%s: AFHTTPRequestOperation error: %@", __FUNCTION__, error);
    }];
    
    [networkQueue addOperation:operation];
    

    }

    接下来是:

    -(void)drawQuantity: (IHPlacedOrder*)order{
    
        PPLinearLayoutLabelItem *quantityLabel = [[PPLinearLayoutLabelItem alloc] initWithText:[NSString stringWithFormat:@"%@ QUANTITY & %@ REFILLS", _numberOfPacks,_numberOfAutoRefills] font:[PPFonts regular18] maxWidth:[LayoutValues getMaxWidthClipped]];
        [quantityLabel setPaddingBottom:5];
        [quantityLabel setPaddingTop:20];
        [self.topContainerContent addObject:quantityLabel];
    
        NSString* quantityText = [NSString stringWithFormat:@"Packs + Autorefills"];
    
    
        PPLinearLayoutLabelItem *quantity = [[PPLinearLayoutLabelItem alloc] initWithText:quantityText font:[PPFonts genericParagraphFontBold] maxWidth:[LayoutValues getMaxWidthClipped]];
        [quantity setPaddingBottom:20];
        [self.topContainerContent addObject:quantity];
    
        LinearLayoutHorizontalLine *line1 = [[LinearLayoutHorizontalLine alloc] initWithMaxWidth:[LayoutValues getMaxWidthClipped]];
        [self.topContainerContent addObject:line1];
    }
    

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我使用错误的方法调用来设置标签。问题是我的应用程序使用PPLinearLayoutLabelItem作为自定义构建标签。我不得不打电话给[self.quantity setLabel:@"%@",data_fromapi]以使其正常工作。 setText只是在PPLinearLayoutLabelItem类中设置文本而不设置Label。