2011-12-01 182 views
4

我試圖配置雙組分選擇器,並且我得到我註釋掉了一些錯誤:使用未聲明的標識符的

實現文件:

#import "BIDDoubleComponentPickerViewController.h" 

@implementation BIDDoubleComponentPickerViewController 

@synthesize doublePicker; 
@synthesize fillingTypes; 
@synthesize breadTypes; 

- (IBAction)buttonPressed:(id)sender 
{ 
    NSInteger fillingRow = [doublePicker selectedRowInComponent:kFillingComponent]; // Use of undeclared identifier 'kFillingComponent' 
    NSInteger breadRow = [doublePicker selectedRowInComponent:kBreadComponent]; // Use of undeclared identifier 'kBreadComponent' 

    NSString *bread = [breadTypes objectAtIndex:breadRow]; 
    NSString *filling = [fillingTypes objectAtIndex:fillingRow]; 

    NSString *message = [[NSString alloc]initWithFormat:@"Your %@ on %@ bread 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]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    NSArray *fillingArray = [[NSArray alloc] initWithObjects:@"Ham", @"Turkey", @"Peanut Butter", @"Tuna Salad", @"Chicken Salad", @"Roast Beef", @"Vegemite", nil]; 
    self.fillingTypes = fillingArray; 

    NSArray *breadArray = [[NSArray alloc] initWithObjects:@"White", @"Whole Wheat", @"Rye", @"Sourdough Bread", @"Seven Grain", nil]; 
    self.breadTypes = breadArray; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
    self.doublePicker = nil; 
    self.breadTypes = nil; 
    self.fillingTypes = nil; 
} 




#pragma mark - View lifecycle 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

#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 identifier 'kBreadComponent' 
     return [self.breadTypes.count]; // Expected identifier 
     return [self.fillingTypes objectAtIndex:row]; // Use of undeclared identifier 'row' 
    } 
} 

#pragma mark Picker Delegate Methods 
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    if (component == kBreadComponent) { // Use of undeclared identifier 'kBreadComponent' 
     return [self.breadTypes objectAtIndex:row]; 
     return [self.fillingTypes objectAtIndex:row]; 
    } 
} 




@end 

接口文件:

#import <UIKit/UIKit.h> 

@interface BIDDoubleComponentPickerViewController : UIViewController 
<UIPickerViewDelegate, UIPickerViewDataSource> 

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

- (IBAction)buttonPressed:(id)sender; 


@end 

回答

6

kBreadComponentkFillingComponent沒有在任何地方聲明。如果它們是在頭文件(.h)文件中聲明的,則需要#import它。

+0

謝謝。錯過了.h文件中的內容;添加它,並且它工作。 – pdenlinger

0

您的numberOfRowsInComponenttitleForRow方法是類似的,它們是錯誤的:它們有兩個結果無條件return,這意味着第二個將永遠不會執行。

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    return self.breadTypes.count; 
} 

#pragma mark Picker Delegate Methods 
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    if (component == kBreadComponent) { 
    return [self.fillingTypes objectAtIndex:row]; 
} 
    return nil; // Or something, empty string for example. Method requires to return a NSString, so you have to return at least nil; 
} 

還是你必須要找到kBreadComponentkFillingComponent#import與他們的定義文件。

+0

是的,謝謝。發現我已經複製了一種方法的主體兩次。一旦我改變了,我確定了。 – pdenlinger