NSstring,IBAction中格式错误

时间:2012-11-05 14:36:38

标签: iphone objective-c ios

我在ViewdidLoad中声明了NSString的一些字符串值,如..

int i=1;
strval=[NSString stringWithFormat:@"%03d",i];
strval=[NSString stringWithFormat:@"S%@",strval];

NSLog(@"Value %@",strval);

它给出了正确的结果作为S001,但当我在IBAction中打印时,

- (IBAction)stringvalue:(id)sender {
NSLog(@"Value %@",strval);
}

每次都会给出未知值。有时它会抛出EXEC_BAD_ACCESS错误。

请帮帮我..

3 个答案:

答案 0 :(得分:7)

尝试这样的事情

in .h

  @property (nonatomic, strong) NSString *strval;

in .m

  @synthesize strval = _strval

  - (void)viewDidLoad 
  {
      int i = 4;
      // ARC
      _strval = [NSString stringWithFormat:@"hello %d", i];
      // None ARC
      // strcal = [[NSString alloc] initwithFormat:@"hello %d",i];
      NSLog(@"%@", _strval);
      // Prints "hello 4" in console (TESTED)
  } 

  - (IBAction)buttonPress:(id)sender
  {
      NSLog(@"%@", _strval);
      // Prints "hello 4" in console (TESTED)
  }

使用ARC。这已经过测试,并按照问题的方式工作。

答案 1 :(得分:4)

看起来您没有使用ARC,因此下次自动释放池耗尽时会释放该字符串。您需要在retain中明确viewDidLoad并在您的被覆盖的release方法中明确dealloc

- (void)viewDidLoad
{
    ...

    strval = [[NSString stringWithFormat:@"%03d", i] retain];

    ....
}

- (void)dealloc
{
    [strval release];

    ...

    [super dealloc];
}

(我假设您实际上已将strval声明为实例方法)。

答案 2 :(得分:3)

in .h

  @property (nonatomic, strong) NSString *strval;

in .m

  @synthesize strval = _strval   

- (void)viewDidLoad
{
    ...

    self.strval = [NSString stringWithFormat:@"%03d", i];

    ....
}

- (void)dealloc
{
    self.strval = nil;

    ...

    [super dealloc];
}

这个也适用于ARC和没有。

只需添加一个:使用ARC时,必须省略语句[super dealloc];