Xcode - NSLog()没有从模型类登录到控制台?

时间:2012-01-05 21:03:20

标签: objective-c xcode

我正在通过斯坦福大学CS193P课程自学iOS 5编程,我刚开始并参与了第一个项目。我想使用NSLog()将值回显到控制台,并且我从控制器中发送到控制台的任何日志都会显示,但是从模型类发送的任何NSLog消息都不会。我做错了吗?

来自我的CalculatorViewController.m文件:

- (IBAction)enterPressed
{
    //The Following NSLog() works.
    NSLog(@"Adding number %g to operandStack", [self.display.text doubleValue]);
    [self.brain pushOperand:[self.display.text doubleValue]];
    self.userIsInTheMiddleOfEnteringANumber = NO;
}

来自我的CalculatorBrain.m文件:

-(void)pushOperand:(double)operand
{
    //The Following NSLog() doesn't show up in the console
    NSLog(@"Received number %@ for operandStack", operand);
    NSNumber *operandObject = [NSNumber numberWithDouble:operand];
    [self.operandStack addObject:operandObject];
}

代码也没有正常工作,一切编译运行得很好,没有警告或错误,但模型中的方法没有返回预期的对象,它们是(零),所以我觉得也许控制器与模型交互的方式是错误的?

这就是我实例化CalculatorBrain模型BTW:

#import "CalculatorViewController.h"
#import "CalculatorBrain.h"

@interface CalculatorViewController()
@property (nonatomic) BOOL userIsInTheMiddleOfEnteringANumber;
@property (nonatomic, strong) CalculatorBrain *brain;
@end

@implementation CalculatorViewController

@synthesize display = _display;
@synthesize userIsInTheMiddleOfEnteringANumber = _userIsInTheMiddleOfEnteringANumber;
@synthesize brain = _brain;

-(CalculatorBrain *)brian
{
    if (! _brain) _brain = [[CalculatorBrain alloc] init];
    return _brain;
}

2 个答案:

答案 0 :(得分:3)

brain的吸气器中有一个拼写错误。当您向self.brain发送消息时,它总是会返回nil,因为错误输入的方法brian(您进行实例化的地方)没有收到消息。

-(CalculatorBrain *)brian
{
    if (! _brain) _brain = [[CalculatorBrain alloc] init];
    return _brain;
}

double的格式说明符也是%f。所以你的NSLog应该是这样的......

NSLog(@"Received number %f for operandStack", operand);

答案 1 :(得分:1)

Mark Adams的补遗回答(我将根据Mark的回答发表评论,但我觉得答案允许更好的格式化......随意编辑到你的答案中)

编译器不会发出警告,因为您有一个名为
的属性 brain
并定义一个名为
的方法 brian

你可以定义你想要的任何方法,你就是不能调用你想要的任何方法。错误在于你期待的事实

-(CalculatorBrain*)brian  

覆盖属性brain

的getter方法