Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用stringByAppendingString连接ID类型的字符串_Objective C_Nsstring_Nsmutablearray - Fatal编程技术网

Objective c 使用stringByAppendingString连接ID类型的字符串

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

大约一周前我开始了Objective-C编程,我一直在从传入函数的字符串数组中创建一个新字符串。我已经对此进行了彻底的研究,似乎无法理解为什么我可以使用
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;