字符串长度错误

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;
 

【问题讨论】:

向我们展示您将数据添加到此数组的代码。这个charityIdNSNumber 对象,而不是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】:

将此代码用于NSNumberNSString

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

【讨论】:

【参考方案6】:

如果您尝试NSLogNSNumber,请执行以下操作,请替换:

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(即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]);

【讨论】:

以上是关于字符串长度错误的主要内容,如果未能解决你的问题,请参考以下文章

请教获取CString长度错误

自定义字符串长度函数逻辑错误

错误拆分字符串索引和长度必须引用一个位置

错误 字符串长度超过 maxJsonLength 属性设置的值

(SqlServe)关于字符串长度被截断的问题

查询字符串参数长度问题。 Http 错误 400