2013-04-18 64 views
1

我在我的程序中创建堆栈类,我希望存储NSString值。 这是Stack类:如何在堆栈中存储NSString

@interface Stack : NSObject 
- (void)push:(id)obj; 
- (id)pop; 
- (BOOL)isEmpty; 
@end 
@implementation Stack 
{ 
    NSMutableArray *stack; 
} 
- (id)init 
{ 
    self = [super init]; 
    if(self!= nil){ 
     stack = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 
- (void)push:(id)obj 
{ 
    [stack addObject:obj]; 
} 
- (id)pop 
{ 
    id lastobj = [stack lastObject]; 
    [stack removeLastObject]; 
    return lastobj; 
} 
- (BOOL)isEmpty 
{ 
    return stack.count == 0; 
} 
@end 

我也有另外一个类名:TableViewController 我想,当点击在TableViewController店细胞的ID从URL

接收小区,这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

{ 
    // I want that xCode value with xCode2 value push in stack 

    NSLog(@"Row in Tab : %d",indexPath.row); 

    if ([Folder containsObject:[All objectAtIndex:indexPath.row]]) { 
     NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.1.%d/mamal/filemanager.php?dir=%@&folder=%d&id",IP,xCode,indexPath.row]]; 
     NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
     NSURLResponse *response = nil; 
     NSError *err = nil; 
     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 
     NSString *responseString = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding]; 
     xCode2 = responseString;   //this is new cell's id.I want to push this value in stack 
     NSLog(@"xcode : %@", xCode2); 

     [self performSegueWithIdentifier:@"segue4" sender:self]; 
    } 

    else 
    { 
     [self performSegueWithIdentifier:@"segue3" sender:self]; 

    } 
} 

最上面的代码我想点击单元格中的单元格推入堆栈中的两个值(xCode & xCode2)但我不知道要使用堆栈。

+0

您是否在使用ARC? – dreamlax

+0

你在哪里实现了'addObject:'etc?我想你想从'NSMutableArray'而不是'NSObject'继承。然后从'init'方法中删除'stack = ...'语句。 –

+0

是我使用ARC – janatan

回答

1
  1. 你需要保存您的堆栈变量..我会做它的成员VAR:

    @implementation TableViewController { 
        Stack *_stack; 
    } 
    ... 
    
  2. 然后单击单元格时,按下值

    ... 
    if(!_stack) 
        _stack = [[Stack alloc] init]; 
    [_stack push:xcode2]; 
    ... 
    
+0

我的朋友如何弹出对象在堆栈 – janatan

+0

这回答了这个问题,但可能不是你想要的...实际上我没有得到你想要的,但是这本身并没有用 –

+0

调用[_stack pop];) –

0

除了Daij-Djan提出的建议,请执行以下操作:

@interface Stack : NSMutableArray 
- (void)push:(id)obj; 
- (id)pop; 
- (BOOL)isEmpty; 
@end 
@implementation Stack 

- (id)init 
{ 
    self = [super init]; 
    if(self!= nil){ 
     // Perform any initialization here. If you don't then there is no point in implementing init at all. 
    } 
    return self; 
} 
- (void)push:(id)obj 
{ 
    [self addObject:obj]; 
} 
- (id)pop 
{ 
    id lastobj = [self lastObject]; 
    [self removeLastObject]; 
    return lastobj; 
} 
- (BOOL)isEmpty 
{ 
    return [self count] == 0; 
} 
@end