Objective c 使用stringByAppendingString连接ID类型的字符串
大约一周前我开始了Objective-C编程,我一直在从传入函数的字符串数组中创建一个新字符串。我已经对此进行了彻底的研究,似乎无法理解为什么我可以使用Objective c 使用stringByAppendingString连接ID类型的字符串,objective-c,nsstring,nsmutablearray,Objective C,Nsstring,Nsmutablearray,大约一周前我开始了Objective-C编程,我一直在从传入函数的字符串数组中创建一个新字符串。我已经对此进行了彻底的研究,似乎无法理解为什么我可以使用stringByAppendingString一次(使用NSLog检查),但第二次就不会抛出此错误: 谢谢你的关注 2012-06-29 20:46:35.761计算器[32883:f803]-[\uu NSCFNumber stringByAppendingString:]:发送到实例0x6e43d50的无法识别的选择器 2012-06-29
stringByAppendingString
一次(使用NSLog
检查),但第二次就不会抛出此错误:
谢谢你的关注
2012-06-29 20:46:35.761计算器[32883:f803]-[\uu NSCFNumber stringByAppendingString:]:发送到实例0x6e43d50的无法识别的选择器
2012-06-29 20:46:35.763计算器[32883:f803]*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSCFNumber stringByAppendingString::]:未识别的选择器发送到实例0x6e43d50'
stringByAppendingString是NSString的一种方法,您必须将displayString作为NSString返回
+ (NSString *)descriptionOfTopOfStack:(NSMutableArray *)stack
{
NSLog(@"stack array :: %@",stack);
NSString *result;
NSString *displayString = [[NSString alloc]init];
id topOfStack = [stack lastObject];
if (topOfStack) [stack removeLastObject];
NSLog(@"topOfStack :: %@", (NSString*)topOfStack);
if ([self isNoOperandOperation:topOfStack]) {
displayString = [[(NSNumber*)displayString stringValue]
stringByAppendingString:(NSString*)topStack];
result = displayString;
}
else if ([self isOperation:topOfStack]){
id nextInStack = [stack lastObject];
if (topOfStack) [stack removeLastObject];
displayString = [[(NSNumber*)displayString stringValue]
stringByAppendingString:(NSString*)nextInStack];
displayString = [[(NSNumber*) displayString stringValue]
stringByAppendingString:(NSString*)topStack];
result = displayString;
编辑:stringByAppendingString方法需要NSString的参数类型,您的topOfStack是类型ID,您需要将此类型强制转换为NSString,假设您的topOfStack是字符串,对于nextInStack也是一样,您需要先将您的
ID
转换为字符串。对于NSNumbers,您可以使用-stringValue
我想将它们全部保留为字符串。我还需要将它们转换为字符串吗(这是强制转换,对吗?)@elHorHay不,objc中没有强制转换重载。您必须在NSNumber上使用-stringValue将其转换为字符串。有趣的是…这让我克服了错误,谢谢。但是,每条语句后的displayString返回null。查看它…我明白了,我将语法更改为displayString=[displayStringByAppendingString:[(NSNumber*)nextInStack stringValue]];这很有效。
+ (NSString *)descriptionOfTopOfStack:(NSMutableArray *)stack
{
NSLog(@"stack array :: %@",stack);
NSString *result;
NSString *displayString = [[NSString alloc]init];
id topOfStack = [stack lastObject];
if (topOfStack) [stack removeLastObject];
NSLog(@"topOfStack :: %@", (NSString*)topOfStack);
if ([self isNoOperandOperation:topOfStack]) {
displayString = [[(NSNumber*)displayString stringValue]
stringByAppendingString:(NSString*)topStack];
result = displayString;
}
else if ([self isOperation:topOfStack]){
id nextInStack = [stack lastObject];
if (topOfStack) [stack removeLastObject];
displayString = [[(NSNumber*)displayString stringValue]
stringByAppendingString:(NSString*)nextInStack];
displayString = [[(NSNumber*) displayString stringValue]
stringByAppendingString:(NSString*)topStack];
result = displayString;