2012-02-13 3 views
0

ниже - метод класса, который всегда возвращает null -when, например, stack = 2,2, «+» Я хочу, чтобы он возвращал «2 + 2»CS193P - Назначение 2, описаниеOfTopOfStack :, метод рекурсивного класса

в начальной итерации метод корректно определяет topOfStack является NSString, а не NSNumber, но не создает NSString «описание» на равную «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; 
} 

ответ

1

Метод stringByAppendingString: возвращает строку с автореализацией, не изменяет исходную. Если вы хотите изменить description вы должны сделать что-то вроде

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

г. Кроме того, написание

NSString *description; 

вы просто создать указатель на NSString, а не NSString. Использовать вместо этого

+0

yep, он работает, спасибо – John67

+0

Я понимаю, что я ожидал изменить неизменяемую строку! Doh! – John67

Смежные вопросы