#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»?