У меня есть plist ( images.plist ) со следующим содержанием
Как видите, у каждого элемента есть цифровая клавиша от 0 до 19. Каждый элемент также имеет две строки (fileName и fileInfo).
Я пытаюсь загрузить все fileName в TableView. Вот моя попытка:
RosterMasterViewController.h
@interface RosterMasterViewController : UITableViewController
@property (nonatomic, strong) NSDictionary *roster;
@end
RosterMasterViewController.m
@implementation RosterMasterViewController
@synthesize roster = _roster;
...
// This is in my 'viewDidLoad'
NSString *file = [[NSBundle mainBundle] pathForResource:@"images" ofType:@"plist"];
self.roster = [NSDictionary dictionaryWithContentsOfFile:file];
А вот как я пытаюсь загрузить имя файла в ячейки прототипа.
RosterMasterViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"imageNameCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell
cell.textLabel.text = [[[self.roster allKeys] objectAtIndex:indexPath.row] objectForKey:@"fileName"];
return cell;
}
Примечание
Для записи, мой CellIdentifier является правильным, если я установлю для cell.textLabel.text значение @"HELLO!"
, тогда я увижу «HELLO!» для каждого элемента в NSDictionary. У меня проблемы с разделом //Configure the cell
К сожалению, это не работает, как я ожидал. Я испытываю затруднения, так как мои ключи все числовые, я думаю.
UPDATE
Пытаясь использовать то, что я узнал из ответов ниже, у меня есть это:
// Configure the cell
NSLog(@"Key: %@", [NSNumber numberWithInt:indexPath.row]);
NSDictionary *dict = [self.roster objectForKey:[NSNumber numberWithInt:indexPath.row]];
NSLog(@"Dictionary: %@", dict);
NSString *fileName = [dict objectForKey:@"fileName"];
NSLog(@"FileName: %@", fileName);
cell.textLabel.text = fileName;
return cell;
Но это дает мне такие результаты, как:
2012-02-03 11:24:24.295 Roster[31754:f803] Key: 7
2012-02-03 11:24:24.295 Roster[31754:f803] Dictionary: (null)
2012-02-03 11:24:24.296 Roster[31754:f803] FileName: (null)
Если я изменю эту строку:
NSDictionary *dict = [self.roster objectForKey:[NSNumber numberWithInt:indexPath.row]];
до:
NSDictionary *dict = [self.roster objectForKey:@"5"];
Тогда все ячейки будут иметь правильное имя файла для 6-го элемента. Есть идеи, почему [NSNumber numberWithInt:indexPath.row
не работает?