字符串长度错误

时间:2013-12-04 09:18:55

标签: ios iphone uitableview ios7

我有一个可能包含大量数据的表视图。 当用户选择一个特定单元格时,我根据该选择在字符串中设置Id。然后我试图找到该字符串的长度。但我得到的错误。当我打印该字符串时,它会打印它的值。 这是我的代码。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
 NSArray *charityArray = [dataArray objectAtIndex:indexPath.row];
charityId=[charityArray objectAtIndex:0];
NSLog(@"charityId%@",charityId);
NSLog(@"charitylen%d",[charityId length]);
}

这是日志屏幕。

  

2013-12-04 14:47:13.897 GratZeez [2178:a0b] charityId3   2013-12-04 14:47:13.897 GratZeez [2178:a0b] - [__ NSCFNumber长度]:无法识别的选择器发送到实例0xd174070 2013-12-04 14:47:13.899   GratZeez [2178:a0b] * 由于未捕获的异常而终止应用程序   'NSInvalidArgumentException',原因:' - [__ NSCFNumber length]:   无法识别的选择器发送到实例0xd174070'

charityId声明:

#import <UIKit/UIKit.h>

 @interface ExsitingCharityViewController : UIViewController<UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate>
{
NSMutableArray *dataArray,*tempArray,*searchResultArray,*nameSearchArray;
BOOL search;
NSMutableDictionary *dataDict;
CGPoint originalCenter;
NSString *charityId;
 }

7 个答案:

答案 0 :(得分:1)

试试此代码,将NSNumber转换为NSString,然后使用length

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
           NSArray *charityArray = [dataArray objectAtIndex:indexPath.row];
           charityId = [charityArray objectAtIndex:0];
           NSString *charityString = [charityId stringValue];
           NSLog(@"charityString = %@", charityString);
           NSLog(@"charityString length = %d",[charityString length]);
    }

答案 1 :(得分:1)

发布时,慈善机构ID不是NSNumber格式化的类型值。 如果您想知道长度转换为NSString格式, 就像,NSString* str = [NSString stringwithFormat:@"%@", charityId]; 然后你得到length

答案 2 :(得分:0)

如果您尝试NSLog NSNumber执行以下操作,请将其替换为:

NSLog(@"charitylen%d",[charityId length]);

有了这个:

NSString *myString = [charityId stringValue];
NSLog(@"charitylen%@", myString);

如果您正在尝试获取数组的计数,请使用以下内容:

NSLog(@"charitylen%d",[charityId count]);

<强>更新

我对你的案子有意见:

1-这意味着您传递NSNumber,其中被调用代码需要NSString或其他具有length方法的对象。您可以告诉Xcode中断异常,以便您可以看到length方法的确切位置。

2 - 我认为这可能是因为您的charityId为空或从未在NSLog之前使用过。

答案 3 :(得分:0)

如错误日志所示,您将向NSNumber对象发送长度消息。根据您的帖子,您似乎尝试将其发送到NSString,但它不是NSString

  

- [__ NSCFNumber 长度]:无法识别的选择器发送到实例0xd174070'

答案 4 :(得分:0)

如果您希望将%d字符串格式说明符与NSNumber一起使用,则应首先将NSNumber对象转换为整数:

NSLog(@"charityId%d",[charityId intValue]);

答案 5 :(得分:0)

将此代码用于NSNumberNSString

NSString *strId=[NSString StringWithFormat@"%d", charityId];
NSLog(@"charitylen%d",[strId length]);

答案 6 :(得分:0)

-[__NSCFNumber length]: unrecognized selector sent to instance这意味着您会尝试获取length的数字(例如intNSInteger等)。所以你需要进行类型转换。

您可以使用[NSString stringWithFormat:@"%d", charityId][charityId stringValue]

来执行此操作

所以只需在下面

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   NSArray *charityArray = [dataArray objectAtIndex:indexPath.row];
   charityId=[charityArray objectAtIndex:0];
   NSString *charityIdString=[NSString stringWithFormat:@"%d", charityId];
   NSLog(@"charityId%@",charityIdString);
   NSLog(@"charitylen%d",[charityIdString length]);
}
相关问题