2

新しい国を追加するたびに別の if ステートメントを追加するため、 CountryViewController.m を短縮する方法があるかどうかを知りたいです。

新しいテーブル ビューをプッシュする UITableViews を使用しています。

RootViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
    
    ASIA   = [[NSMutableArray alloc] init];
    EU     = [[NSMutableArray alloc] init];

    [ASIA    addObject: @"China"];
    [ASIA    addObject: @"Japan"];
    [ASIA    addObject: @"Korea"];
    [EU      addObject: @"France"];
    [EU      addObject: @"Italy"];
    [EU      addObject: @"Switzerland"];

    self.title = @"Continent";
}

CountryViewController.m

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear: animated];

    if ([self.title isEqualToString: @"China"]) {
        _listOfCities = [[NSMutableArray alloc] init];
        [_listOfCities addObject: @"Beijing"];
        [_listOfCities addObject: @"Hong Kong"];
    }

    else if ([self.title isEqualToString: @"Japan"]){
        _listOfCities = [[NSMutableArray alloc] init];
        [_listOfCities addObject: @"Tokyo"];
    }

    else if ([self.title isEqualToString: @"Korea"]){
        _listOfCities = [[NSMutableArray alloc] init];
        [_listOfCities addObject: @"Seoul"];
    }

    else if ([self.title isEqualToString: @"France"]){
        _listOfCities = [[NSMutableArray alloc] init];
        [_listOfCities addObject: @"Paris"];
        [_listOfCities addObject: @"Versailles"];
    }

    else if ([self.title isEqualToString: @"Italy"]){
        _listOfCities = [[NSMutableArray alloc] init];
        [_listOfCities addObject: @"Rome"];
    }

    else if ([self.title isEqualToString: @"Switzerland"]){
        _listOfCities = [[NSMutableArray alloc] init];
        [_listOfCities addObject: @"Bern"];
    }

    [self.tableView reloadData];
}
4

1 に答える 1

4

簡単な方法は、プロパティ リストを使用し、それをバンドル リソースとして含めることです (つまり、プロジェクトに追加するだけです)。

たとえば、プロパティ リストが次のようになっているとします。 ここに画像の説明を入力

次に、それをロードできます

countries = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"CountryData" ofType:@"plist"]];

通常の辞書または配列として使用します。つまり、

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear: animated];

    NSString* countryName = self.title;
    NSDictionary* country = [countries objectForKey:countryName];
    NSArray* cities = [country objectForKey:@"Cities"];
    NSString* continent = [country objectForKey:@"Continent"];
    _listOfCities = cities;

    [self.tableView reloadData];
}

plist ファイルは、XCode で簡単に編集できます。

于 2012-10-10T16:36:59.040 に答える