从null向后工作

时间:2010-11-12 19:21:43

标签: objective-c variables casting null

我知道,一旦你在编码方面做得更好,就会知道变量是什么,并且在这里出现空值,可能不会发生。在通往这种心态的过程中,是否有任何方法可以使您的变量声称为null,并验证它确实为null,或者您只是使用了错误的代码?

示例:

-(IBAction) startMotion: (id)sender {
    NSLog(@"Forward or back button is being pressed.");
    UIButton * buttonName = (UIButton *) sender;
    NSLog(@"Button Name:  %@", buttonName.currentTitle);
}

按钮名称:( null)是控制台中显示的内容

由于

3 个答案:

答案 0 :(得分:1)

According to Apple's docs, the value for currentTitle may be nil.可能没有设置。

您始终可以if (myObject == nil)进行检查,或者在这种情况下:

-(IBAction) startMotion: (id)sender {
  NSLog(@"Forward or back button is being pressed.");
  UIButton * buttonName = (UIButton *) sender;
  if (buttonName != nil) {
    NSString *title = buttonName.currentTitle;
    NSLog(@"Button Name:  %@", title);
  }
}

检查后退或前进按钮是否被按下的另一种方法是检查id本身。

//in the interface, and connect it up in IB
//IBOutlet UIButton *fwdButton;
//IBOutlet UIButton *bckButton;

-(IBAction) startMotion: (id)sender {
  NSLog(@"Forward or back button is being pressed.");
  UIButton * buttonName = (UIButton *) sender;
  if (buttonName == fwdButton) {
    NSLog(@"FWD Button");
  }

  if (buttonName == bckButton) {
    NSLog(@"BCK Button");
  }
}

另外,请确保您的插座和操作都在IB中连接,并保存并重新构建项目。我已经离开了我在IB中更改某些内容的地方,保存了.m文件(不是笔尖)并且就像“为什么这不起作用?”

答案 1 :(得分:0)

我在Interface Builder中使用了错误的字段我使用Interface Builder Identity中的Name而不是按钮设置中的Title。

答案 2 :(得分:-3)

buttonName不能为空,否则buttonName.currentTitle会产生错误。

因此currentTitle属性本身必须为空。

或者,currentTitle可能是一个值为(null)的字符串。

通常,在Objective-C中,如果您有[[[myObject aMethod] anotherMethod] xyz]且结果为null,则很难知道哪个方法返回null。但是使用点语法.并非如此。