在UILabel上使用setText时无效的Argument异常

时间:2011-05-16 09:36:08

标签: iphone string exception progress-bar 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。)

2 个答案:

答案 0 :(得分:3)

选项1 - 问题是标签已被解除分配。 cell.downloadProgressLabel指向坏内存,有时恰好是一个字符串,执行该代码时应该会遇到不同的错误。

选项2 - 您正在创建downloadProgressLabel作为字符串而不是uilabel,或者您正在执行cell.downloadProgressLabel = [some string object];在错误的代码中的某个地方,虽然这应该发出警告:)

答案 1 :(得分:0)

我对下面的行有疑问,请检查downloadProgressLabel的类型,它可能是您的单元格类中声明的NSString

使用以下代码。

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