我有一个可能包含大量数据的表视图。 当用户选择一个特定单元格时,我根据该选择在字符串中设置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;
}
答案 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)
将此代码用于NSNumber
到NSString
NSString *strId=[NSString StringWithFormat@"%d", charityId];
NSLog(@"charitylen%d",[strId length]);
答案 6 :(得分:0)
-[__NSCFNumber length]: unrecognized selector sent to instance
这意味着您会尝试获取length
的数字(例如int
,NSInteger
等)。所以你需要进行类型转换。
您可以使用[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]);
}