2012-12-12 30 views
0

我在實現文件(註釋掉)中爲頭文件中聲明的常量獲取了錯誤消息。爲什麼編譯器會這樣做?實現文件看不到在頭文件中聲明的常量

在此先感謝。

頭文件

#import <UIKit/UIKit.h> 

#define kFilling Component 0 
#define kBread Component 1 

@interface BIDDoubleComponentViewController : UIViewController 
<UIPickerViewDelegate, UIPickerViewDataSource> 

@property (strong, nonatomic) IBOutlet UIPickerView *doublePicker; 
@property (strong, nonatomic) NSArray *fillingTypes; 
@property (strong, nonatomic) NSArray *breadTypes; 

- (IBAction) buttonPressed; 


@end 

實現文件:

#import "BIDDoubleComponentViewController.h" 


@implementation BIDDoubleComponentViewController 

- (IBAction)buttonPressed 
{ 
    NSInteger fillingRow = [self.doublePicker selectedRowInComponent:kFillingComponent]; // Use of undeclared identifieer 'kFillingComponent' 
    NSInteger breadRow = [self.doublePicker selectedRowInComponent:kBreadComponent]; // Use of undeclared identifieer 'kBreadComponent' 

    NSString *filling = self.fillingTypes[fillingRow]; 
    NSString *bread = self.breadTypes[breadRow]; 

    NSString *message = [[NSString alloc] initWithFormat:@"Your %@ on %@ will be right up.", filling, bread]; 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Thank you for your order" 
               message:message 
               delegate:nil 
             cancelButtonTitle:@"Great" 
             otherButtonTitles:nil]; 
    [alert show]; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.fillingTypes = @[@"Ham", @"Turkey", @"Peanut Butter", @"Tuna salad", @"Chicken salad", @"Roast Beef", @"Vegemite"]; 
    self.breadTypes = @[@"White", @"Whole Wheat", @"Rye", @"Sour Dough", @"Seven-Grain"]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark 
#pragma mark Picker Data Source Methods 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 2; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    if(component == kBreadComponent) // Use of undeclared identifieer 'kFillingComponent' 
    { 
     return [self.breadTypes count]; 
    } else { 
     return [self.fillingTypes count]; 
    } 
} 

#pragma mark Picker Delegate Methods 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    if(component == kBreadComponent) // Use of undeclared identifieer 'kBreadComponent' 

    { 
     return self.breadTypes[row]; 
    } else { 
     return self.fillingTypes[row]; 
    } 
} 


@end 
+0

kFilling和組件以及kBread和Component之間的空白字符的用途是什麼?什麼是「組件」? –

回答

2

你的定義是壞的。您有

#define kBread Component 1 

但是您正在使用kBreadComponent#define正在做的是定義一個稱爲kBread的令牌,該令牌在對代碼Component 1進行預處理期間進行評估。您可能打算使用

#define kBreadComponent 1 
+0

工作;感謝您接受並教導我! – pdenlinger

+0

+1不錯。並且很好的解釋。 –