UITableView не загружает данные из моего plist-файла, что я делаю не так? - PullRequest
0 голосов
/ 31 января 2010

Хорошо, у меня есть приложение, которое я пытаюсь получить, чтобы заполнить UITableView содержимым файла plist. Я не смог найти кого-то еще, у кого были проблемы с этим и как они это исправили, так что я, вероятно, просто идиот, но мне нужно знать, как все же!

Я уверен, что ошибка находится где-то в моем разделе viewDidLoad или моем разделе таблицы ... но, может быть, кто-то другой может дать мне лучшую идею.

-(void)viewDidLoad {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"datam" ofType:@"plist"];
    NSArray *array = [[NSArray alloc] initWithContentsOfFile:path];
    self.listData = array;
    [array release];


    [super viewDidLoad];
}

#pragma mark -
#pragma mark Table View Data Source Methods
- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section {
    return [self.listData count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    static NSString *SimpleTableIdentifier = @"Identifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Identifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier] autorelease];
    }

    NSUInteger row = [indexPath row];
    cell.textLabel.text = [listData objectAtIndex:row];
    return cell;
}

Ответы [ 3 ]

1 голос
/ 31 января 2010

Я думаю, что [super viewDidLoad] должно быть в первую очередь в методе viewDidLoad.

0 голосов
/ 31 января 2010
NSString *path = [[NSBundle mainBundle] pathForResource:@"datam" ofType:@"plist"];
NSArray *array = [[NSArray alloc] initWithContentsOfFile:path];

Это кажется немного странным; Ваш файл называется "datam.plist"?

Попробуйте использовать несколько NSLogs () в вашем коде, чтобы увидеть, каково состояние вашего массива в любой момент времени:

NSLog(@"%@ has %i elements",ARRAY_OBJECT,[ARRAY_OBJECT count]);

Проверьте вывод GDB в XCode во время работы приложения, чтобы убедиться, что результаты соответствуют ожидаемым.

0 голосов
/ 31 января 2010
self.listData = array; [array release];

Попробуйте вместо этого:

self.listData = [array copy]; [array release];

NSArray объекты являются указателями; когда вы устанавливаете self.listData = array, вы действительно указываете, что listData ищет адрес памяти, изначально занятый массивом. Когда вы освобождаете массив, он освобождает этот адрес памяти, таким образом указатель указывает на ничто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...