字符串长度错误
Posted
技术标签:
【中文标题】字符串长度错误【英文标题】:Error in string length 【发布时间】:2013-12-04 09:18:55 【问题描述】:我有一个表格视图,其中可能包含许多数据。 当用户选择一个特定的单元格时,我会根据该选择在字符串中设置 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 长度]: 无法识别的选择器发送到实例 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;
【问题讨论】:
向我们展示您将数据添加到此数组的代码。这个charityId
是NSNumber
对象,而不是NSString
。
为 dataArray 添加代码,您可以在其中初始化并向其添加对象。
你可以在我的编辑中看到charityId是字符串
@vivek:你如何声明charityId变量并不重要。如果[charityArray objectAtIndex:0]
是一个NSNumber 对象,那么charityId 指向该对象,它不会被神奇地转换为字符串。
【参考方案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]);
【讨论】:
因为我是根据 SO 规则发布的...但是有些人针对我并对我的每个问题投反对票...现在我被禁止提问【参考方案2】:在您发布时,charityId 不是 NSNumber
格式的类型值。
如果你想知道长度转换成NSString
甲酸盐,
喜欢,NSString* str = [NSString stringwithFormat:@"%@", charityId];
然后你会得到length
。
【讨论】:
【参考方案3】:如错误日志所示,您将长度消息发送到NSNumber
对象。根据您的帖子,您似乎正在尝试将其发送到NSString
,但它不是NSString
。
-[__NSCFNumber 长度]:无法识别的选择器发送到实例 0xd174070'
【讨论】:
charityID 确实是NSString
指针,但 [charityArray objectAtIndex:0] 似乎是 NSNumber
。如果您想知道为什么会这样,请记住 objectAtIndex:
返回一个 id
对象,因此可以将其分配给 NSString
指针。【参考方案4】:
如果您希望将 %d 字符串格式说明符与 NSNumber
一起使用,则应首先将 NSNumber 对象转换为整数:
NSLog(@"charityId%d",[charityId intValue]);
【讨论】:
【参考方案5】:将此代码用于NSNumber
至NSString
NSString *strId=[NSString StringWithFormat@"%d", charityId];
NSLog(@"charitylen%d",[strId length]);
【讨论】:
【参考方案6】:如果您尝试NSLog
和NSNumber
,请执行以下操作,请替换:
NSLog(@"charitylen%d",[charityId length]);
有了这个:
NSString *myString = [charityId stringValue];
NSLog(@"charitylen%@", myString);
如果您尝试获取 Array 的计数,请使用以下命令:
NSLog(@"charitylen%d",[charityId count]);
更新:
我对你的案子有意见:
1- 这意味着您正在传递一个NSNumber
,其中被调用的代码需要一个NSString
或其他具有length
方法的对象。您可以告诉 Xcode 中断异常,以便查看 length
方法被调用的确切位置。
2-我认为这可能是因为您的 charityId
是空的或在您之前从未使用过 NSLog
它。
【讨论】:
这意味着您正在传递一个NSNumber
,其中被调用的代码需要一个NSString
或其他具有length
方法的对象。您可以告诉 Xcode 中断异常,以便查看 length
方法被调用的确切位置。
它在我写 [charityId 长度] 时调用【参考方案7】:
-[__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]);
【讨论】:
以上是关于字符串长度错误的主要内容,如果未能解决你的问题,请参考以下文章