[__NSCFNumber length]: 未识别的选择器发送到实例UITableView

35

我遇到了一个错误

[__NSCFNumber length]: unrecognized selector sent to instance 0x15580c90 2014-02-18 15:10:49.490 CIB[1706:60b] * 应用因未捕获的异常而终止,原因:'-[__NSCFNumber length]: unrecognized selector sent to instance 0x15580c90' * 错误堆栈: (0x2da18e83 0x37d756c7 0x2da1c7b7 0x2da1b0af 0x2d969dc8 0x2e33b695 0x2e33b169 0x301ab2fd 0x1603ad 0x302cf315 0x302776cd 0x30276ef1 0x3019d353 0x2fe23943 0x2fe1f167 0x2fe1eff9 0x2fe1ea0d 0x2fe1e81f 0x2fe1854d 0x2d9e3f69 0x2d9e18f7 0x2d9e1c43 0x2d94c471 0x2d94c253 0x326862eb 0x30201845 0x113de1 0x3826eab7) libc++abi.dylib: 终止了类型为 NSException 的未捕获异常

这里有一个循环。从JSON的数组到我的模型任务列表(tasklist),然后存储到NSMutableArray _tasklist中。

NSArray *taskJson = [json objectForKey:@"fOTaskListModelWss"];

    for (NSDictionary *dictCQ in taskJson) {
        NSLog(@"TASKLIST: %@", [dictCQ objectForKey:@"foTaskListModelWs"]);

        NSDictionary *datadic = [dictCQ objectForKey:@"foTaskListModelWs"];
        TaskList *task = [[TaskList alloc]init];
        [task setTaskCount:datadic[@"count"]];
        [task setFuncCd:datadic[@"funcCd"]];
        [task setFuncCdDscp:datadic[@"funcCdDscp"]];
        [task setRequestStatus:datadic[@"requestStatus"]];
        [task setRole:datadic[@"role"]];
        [_taskList addObject:task];
    }

那么这里是我的代码,位于cellForRowAtRowPathIndex函数中

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString * simpleTableIdentifier = @"MenuTableViewCell";
MenuTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MenuTableViewCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}
TaskList *txn = [_taskList objectAtIndex:indexPath.row];
cell.titleLabel.text = txn.funcCdDscp;
cell.totalCountLabel.text = txn.taskCount;
return cell;}

请检查您的表格 numberofrowsection。 - codercat
你在哪个方法中出现错误时,会在你的表格numberOfRowInSection和cellForRowAtIndexPath方法上设置断点吗? - Banker Mittal
4个回答

88
cell.titleLabel.text = txn.funcCdDscp;
cell.totalCountLabel.text = txn.taskCount;

其中一个(我不确定是哪个,但我的猜测是 taskCount)是一个 NSNumber。Text 是 NSString 类型。


完美。查找所有加载UILabel.text的数据库对象。其中一个可能是NSNumber。 - Gamma-Point
解决问题:我的问题是我发送的参数都是字符串,但其中一个是整数数据类型,这就导致了我的应用程序崩溃...... - M Hamayun zeb

19
cell.titleLabel.text = txn.funcCdDscp;
cell.totalCountLabel.text = [txn.taskCount stringValue];

或者

使用这个作为最佳解决方案

cell.totalCountLabel.text = [NSString stringWithFormat:@"%@",txn.taskCount];

5
希望以下内容对于从网络服务中操作JSON数据有所帮助。
cell.textLabel.text=[NSString stringWithFormat:@"%@",[[JsonDictionaryObject objectForKey:@"Respected_Key_Name"]objectAtIndex:indexPath.row]];

4
这里期望的是 NSString 而不是 NSNumber,所以它会崩溃。因此,将其转换为 NSString,问题便解决了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接