Я ищу, чтобы загрузить определенный файл .plist в зависимости от переменной настроек (в данном случае area
) и от того, какую кнопку нажимал пользователь.Формат файла для .plist будет area-buttonPressed.plist.Ниже приведен код, который используется для вызова определенного файла .plist (в настоящее время зависит только от текущей области)
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad");
self.navigationItem.title = @"Species List";
}
-(void)viewWillAppear:(BOOL)animated{
NSLog(@"viewWillAppear");
area = [[NSUserDefaults standardUserDefaults] stringForKey:@"mulValue"];
NSLog(@"Area is %@",area);
NSString *path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@", area] ofType:@"plist"];
NSLog(@"Path is %@",path);
NSMutableDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
self.names = dict;
[dict release];
NSArray *array = [[names allKeys] sortedArrayUsingSelector:@selector(compare:)];
self.keys = array;
}
Моя главная проблема заключается в том, что если я поместлю код, который в данный момент находится в viewWillAppear, в viewDidLoad, он не будет вызываться снова, если я вернусь назад (я использую NavigationController), изменим область в настройках и снова перейду к этому viewController.В результате этот метод отлично работает при первой загрузке этого представления, но так будет до тех пор, пока я не соберу свой файл снова.
Мои основные вопросы:
- Как правильно установить
NSString *path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@", area] ofType:@"plist"];
, используя 2 переменные (область переменных настроек и значение кнопки, нажатой в последнем виде (у меня естьNSString для этого значения))? - Как мне обновлять * путь каждый раз, когда отображается представление?
- Если это будет решением, как выгрузить представление всякий раз, когда 'Нажата кнопка «Назад» (это решит проблему, потому что viewDidLoad вызывается каждый раз, когда пользователь переходит к этому представлению, верно?)
Ниже приведен остаток моего кода:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [keys count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
NSString *key = [keys objectAtIndex:section];
return key;
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSString *key = [keys objectAtIndex:section];
NSArray *nameSection = [names objectForKey:key];
return [nameSection count];
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger section = [indexPath section];
NSUInteger row = [indexPath row];
NSString *key = [keys objectAtIndex:section];
NSArray *nameSection = [names objectForKey:key];
static NSString *SectionsTableIdentifier = @"SectionsTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SectionsTableIdentifier] autorelease];
}
cell.textLabel.text = [nameSection objectAtIndex:row];
return cell;
}
- (void)viewDidUnload{
self.names = nil;
self.keys = nil;
[super viewDidUnload];
}
- (void)dealloc {
[names release];
[keys release];
[super dealloc];
}
Заранее спасибо!
РЕДАКТИРОВАТЬ: Некоторая информация о том, что говорит мой NSLog:
Всякий раз, когда я нажимаю кнопку, чтобы загрузить представление таблицы, моя консоль показывает «viewWillAppear» и NSLog(@"Area is %@",area);
показывает правильную область (Region1 в данном случае).
NSLog(@"Path is %@",path);
либо показывает (null)
, когда выбрано что-либо, кроме Region1 (пока я создал только Region1.plist), либо iPhone Simulator / 4.2 /.../.../ Region1.plist