Исключение недопустимого аргумента при использовании setText в UILabel

#iphone #string #exception #progress-bar #uilabel

#iPhone #строка #исключение #индикатор выполнения #uilabel

Вопрос:

Я схожу с ума, пытаясь отладить проблему, из-за которой я получаю исключение

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString setText:]: unrecognized selector sent to instance 0x5799c90'
  

код, который его выдает, является:

 - (void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes
{

    for(int index=0;index<[pendingDownloadsArray count];index  )
    {
        if ([request isEqual:[[pendingDownloadsArray objectAtIndex:index]objectForKey:@"request"]])
        {
            NSNumber *x = [[pendingDownloadsArray objectAtIndex:index] objectForKey:@"completed"];

            float newCompleted = [x floatValue] (float)bytes;
//          x =(float)bytes;
                        NSLog(@"Completed: %fKb",newCompleted/1024);
            x = [NSNumber numberWithFloat:newCompleted];

            [[pendingDownloadsArray objectAtIndex:index] setObject:x forKey:@"completed"];
            float progress = newCompleted / (float)request.contentLength;

            //Dont try to get cell if the table is showing something else.
            if(self.selectedSegment ==0)
            {
                DownloadsCustomCell *cell =(DownloadsCustomCell*) [downloadsTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]];
                [cell.downloadProgressView setProgress:progress];
                NSString *progressLabelText = [NSString stringWithFormat:@"%.2f percent (%.2fKb / %.2fKb)",progress*100,
                                           newCompleted/1024,((float)request.contentLength/1024)];
                NSLog(@"%@",progressLabelText);
                UILabel *label = cell.downloadProgressLabel;
                label.text = progressLabelText;
            }

        }

    }
}
  

он выдает исключение в последней строке. (сначала у меня не было ненужной «метки»… таким образом, его существование является признаком того, насколько я запутался.
либо проблема в чем-то, чего я не знал, либо я делаю что-то невероятно глупое, что я не могу определить.
Не могли бы вы, пожалуйста, помочь мне присвоить эту NSString этой UILabel?
(PS: я проверил, downloadsProgressLabel ЯВЛЯЕТСЯ UILABEL.)

Комментарии:

1. Где вы создаете downloadProgressLabel ?

2. Посмотрите на свой стек и определите, какой объект имеет адрес «0x5799c90».

Ответ №1:

Вариант 1 — Проблема в том, что метка была освобождена. cell.downloadProgressLabel указывает на нехватку памяти, которая иногда оказывается строкой, при выполнении этого кода вы должны получать разные ошибки.

Вариант 2 — вы создаете downloadProgressLabel в виде строки вместо uilabel, или вы выполняете cell.downloadProgressLabel = [некоторый объект string]; где-то в коде по ошибке, хотя это должно выдавать предупреждение 🙂

Комментарии:

1. Ага. вы правы, (я думаю) Я неправильно инициализировал метку в cellForRowAtIndexPath (используя несуществующий ключ словаря), я предполагаю, что это было оболочкой, чтобы сойти с ума… Хотя я не уверен точно, как. Спасибо! Итак, я был прав.. Я делал что-то невероятно глупое.

Ответ №2:

Я сомневаюсь в приведенной ниже строке, проверьте тип downloadProgressLabel , он может быть NSString объявлен в вашем классе cell,

Используйте приведенный ниже код.

 if ([cell.downloadProgressLabel isKindOfClass:[UILabel class]])
{
    UILabel *label = cell.downloadProgressLabel;
    label.text = progressLabelText;
}
  

Комментарии:

1. Нет. это не объект NSString. как я уже сказал в последней строке, я проверил.

2. @mvishnu: Вы все еще получаете тот же сбой даже после ввода моего кода?

3. эй, проблема решена. Не могли бы вы, пожалуйста, сослаться на комментарий к ответу «Zaky German»?