2012-01-05 45 views
0

我正在教自己通過斯坦福大學CS193P課程的iOS 5編程,我剛剛開始並且正在進行第一個項目。我想使用NSLog()將值回顯給控制檯,並且我從控制器中發送到控制檯的所有日誌都顯示出來,但是從模型類發送的任何NSLog消息都不會。難道我做錯了什麼?Xcode-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]; 
} 

代碼工作不正常或者,一切編譯和運行得很好,沒有任何警告或錯誤,但模型中的方法沒有返回預期的對象,它們是(無),所以我覺得控制器與模型交互的方式是錯誤的?

這是我如何BTW實例化CalculatorBrain型號:

#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; 
} 

回答

3

有一個在你的getter方法brain一個錯字。當您發送消息self.brain時,它總是返回零,因爲錯誤輸入的方法brian(您在此實例化的地方)沒有被髮送消息。

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

此外雙倍的格式說明符是%f。所以,你的NSLog應該是這樣的......

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

哈哈哈,雞蛋在我的臉上。 爲什麼這個編譯和工作很好?爲什麼沒有警告? – 2012-01-05 21:09:17

1

的增編,馬克·亞當斯回答(我會在馬克的回答發表評論,但我覺得一個答案可以更好的格式...隨意編輯成此您的答案)

編譯器不會發出警告,因爲你有一個名爲
brain
屬性,並且定義了一個名爲方法
brian

你可以定義任何你想要的方法,你不能調用任何你想要的方法。該缺陷就在於你期望

-(CalculatorBrain*)brian 

覆蓋getter方法爲你的財產brain

+0

謝謝,這確實有道理。 – 2012-01-06 14:48:46