我正在通过斯坦福大学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;
}
答案 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