0

以下は、常にnullを返すクラスメソッドです。たとえば、stack = 2,2、 "+"の場合、 "2+2"を返します。

最初の反復で、メソッドはtopOfStackがNSNumberではなくNSStringであると正しく判断しますが、再帰呼び出しによって「2+2」に等しいNSString'description'を作成しません。

ここで明らかな何かが欠けているように感じます。文字列を正しく処理していますか。

+ (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;

NSStringではなく、へのポインタを作成しているだけですNSString。代わりに使用してください

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