обновление UILabel программно - PullRequest
0 голосов
/ 09 мая 2011

Я пытаюсь обновлять текст UILabel в цикле на каждой итерации, но отображается только последнее значение, если для завершения цикла требуется время, равное 30 -50 с.

Вот код:

for (float i=0; i< [topicNew count]; i++) {

    NSDictionary *new= [topicNew objectAtIndex:i];
    NSString *imageName = [[[NSString alloc] initWithFormat:@"%@.%@.%@.png", appDelegate.subject,topicNamed,[new objectForKey:kWordTitleKey]] autorelease];
    NSString *imagePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:imageName];
    NSData *imageData = [self ParsingImagePath:[new objectForKey:kWordImagePathKey]];
    [progressView setProgress:i/[topicNew count]];
    [self setProgress:i/[topicNew count]]; 
    [self.lbltest setText:@"Image Downloading..."];
    self.lbltest.text =imageName;
    //NSLog(@"sending %f",i/[topicNew count]);
    //lblpercent.text = [NSString stringWithFormat:@"%d",i];
    [lblpercent setText:[[NSString stringWithFormat:@"%.0f",i/[topicNew count]] stringByAppendingString:@"%"]];
    //[self.view addSubview:viewalert];
    [self updateLabel:self];
    NSLog(@"%@,%d",imageName,i);
    if(imageData != nil)
        [imageData writeToFile:imagePath atomically:YES];
    else
        [[NSFileManager defaultManager] removeItemAtPath:imagePath error:NULL];

    NSMutableDictionary *newWord = [NSMutableDictionary dictionaryWithObjectsAndKeys:[new objectForKey:kWordTitleKey], kWordTitleKey, [new objectForKey:kWordDefinitionKey], kWordDefinitionKey, imagePath, kWordImagePathKey, appDelegate.subject,kSubjectKey,topicName,kTopicKey,[new objectForKey:kWordMemorizedKey], kWordMemorizedKey, nil];
    [newTopic addObject:newWord];

}

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

Я думаю, проблема в том, что ваш поток заблокирован вашим циклом. Поэтому вам нужно выполнить свой метод в фоновом режиме и использовать

[self performSelectorInBackground:@selector(myMethod) withObject:nil];

Не забудьте вставить "myMethod";

-(void)myMethod{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//I do my label update
[pool release];
}
0 голосов
/ 09 мая 2011

То, как вы используете его сейчас, действительно заменяет текст.Я не знаю, какой ярлык вы хотите обновить.Если вы хотите обновить, например, lbltest тем, что загружается все время, вы должны изменить self.lbltest.text = imageName; на [self.lbltest setText:@"%@ %@", self.lbltest.text, imageName];

Таким образом, ваш старый текст не будет заменен вашим новымтекст, но ваш новый текст добавляется к вашему старому тексту.

Использование labelName.text = @"Something"; изменяет текст на этой метке на Something.

То же самое относится и к [labelName setText:@"Something"];.

Всякий раз, когда вы используете любой из двух описанных выше, вы заменяете текст в этой метке текстом "Что-то".Если вы хотите что-то добавить к этой метке, вы должны включить старый текст в новую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...