2014-01-16 2 views
0

Может кто-то пожалуйста, объясните мне, почему мой сборщика не показывает каких-либо данных, когда я загрузить из списка свойствОтображение данных в подборщика

Это PLIST:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <dict> 
    <key>England</key> 
    <array> 
     <string>Chelsea</string> 
     <string>Arsenal</string> 
    </array> 
    <key>Spain</key> 
    <array> 
     <string>Barca</string> 
     <string>Real</string> 
    </array> 
</dict> 
</plist>` 

Это часть viewController.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSBundle *bundle = [NSBundle mainBundle]; 
    NSURL *plistFile = [bundle URLForResource:@"myPListFile" withExtension:@"plist"]; 
    NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfURL:plistFile]; 
    self.countryClubs = dictionary; 

    NSString *selectedCountry = [self.countries objectAtIndex:0]; 
    NSArray *array = [countryClubs objectForKey:selectedCountry]; 
    self.clubs = array; 
} 

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    if (component == 0) 
     return [self.countries count]; 
    return [self.clubs count]; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row 
     forComponent:(NSInteger)component { 
    if (component == 0) 
     return [self.countries objectAtIndex:row]; 
    return [self.clubs objectAtIndex:row]; 
} 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row 
     inComponent:(NSInteger)component { 
     if (component == 0) { 
     NSString *selectedCountry = [self.countries objectAtIndex:row]; 
     NSArray *array = [countryClubs objectForKey:selectedCountry]; 
     self.clubs = array; 
     [picker selectRow:0 inComponent:1 animated:YES]; 
     [picker reloadComponent:1]; 
    } 
} 

в viewController.hi получил

@property (nonatomic, strong)NSDictionary *countryClubs; 
@property (nonatomic, strong)NSArray *countries; 
@property (nonatomic, strong)NSArray *clubs; 

и viewController.mi получил:

@synthesize countryClubs=_countryClubs; 
@synthesize countries=_countries; 
@synthesize clubs=_clubs; 

Если кто-нибудь может объяснить, почему это сборщика пустым я оценил бы его очень много, кажется, что PLIST не загружен, потому что если я пишу:

self.clubs = [[NSArray alloc]  initWithObjects:@"milimetar",@"centimetar",@"metar",@"kilometar",@"inc",@"stopa",@"jard",@"milja", nil]; 

сборщик показывает данные.

+0

Где установить 'self.countries'? Ваш файл действительно назван * точно * 'myPListFile.plist'? Обратите внимание на верхний регистр 'L' после' P'. – rmaddy

+0

Вы подтвердили, что наборы 'делегат' и' dataSource' сборщика действительно установлены? –

+0

да, это имя myPListFile.plist, и оно находится в каталоге Supporting Files. – user3194296

ответ

0

Ваш viewDidLoad должен быть:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSBundle *bundle = [NSBundle mainBundle]; 
    NSURL *plistFile = [bundle URLForResource:@"myPListFile" withExtension:@"plist"]; 
    NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfURL:plistFile]; 

    self.countryClubs = dictionary; 
    self.countries = [dictionary allKeys]; 

    NSString *selectedCountry = self.countries[0]; 
    NSArray *array = self.countryClubs[selectedCountry]; 
    self.clubs = array; 
} 

В вашем didSelectRow: метод, изменения:

NSArray *array = [countryClubs objectForKey:selectedCountry]; 

к:

NSArray *array = self.countryClubs[selectedCountry]; 

также избавиться от всех ваших @synthesize линий. Если вы используете какой-либо учебник, который говорит об использовании @synthesize, то он устарел. Также избавитесь от любых иваров, которые вы, возможно, явно заявили для своих свойств.

+0

Могу я задать вам еще один вопрос? Как я могу отобразить на ярлыке то, что я выбрал во втором столбце? – user3194296

+0

Добавьте код в свой метод 'didSelectRow:'. Просто проверьте наличие изменений в другом компоненте. Обновите метку со значением. – rmaddy

Смежные вопросы