0

下面是一个总是返回 null 的类方法 - 例如,当 stack = 2,2,"+" 我希望它返回 "2+2"

在初始迭代中,该方法正确确定 topOfStack 是 NSString 而不是 NSNumber 但不会通过递归调用创建 NSString 'description' 等于“2+2”

我觉得我在这里遗漏了一些明显的东西,我是否正确处理了字符串......

+ (NSString *) descriptionOfTopOfStack: (NSMutableArray * ) stack
{
   NSString *description;

id topOfStack = [stack lastObject]; // get last object
if (topOfStack) [stack removeLastObject]; // then remove it from stack

if ([topOfStack isKindOfClass:[NSNumber class]]) { // is last object a number?
    return [topOfStack stringValue]; // if so then return it, **done*** 
}
else if ([topOfStack isKindOfClass:[NSString class]]) 
{      
    if ([topOfStack isEqualToString:@"+"])
          {
                 [description stringByAppendingString: [self descriptionOfTopOfStack:stack]];
                 [description stringByAppendingString:@"+"];
                 [description stringByAppendingString: [self descriptionOfTopOfStack:stack]];
          }


   }

   NSLog(@"Description is %@", description);

return description;
}
4

1 回答 1

1

方法stringByAppendingString:返回一个自动释放的字符串,不修改原始字符串。如果你想修改description你必须做类似的事情

description = [description stringByAppendingString: [self descriptionOfTopOfStack:stack]];

此外,写作

NSString *description;

您只是在创建指向 a 的指针NSString,而不是 a NSString。改为使用

NSString* description = @"";
于 2012-02-13T23:22:15.590 回答