2011-02-08 2 views
5

У меня есть NSMutableArray с данными (жестко закодированные).Как использовать NSMutableArray как источник данных для UITableView

я реализовал эти два метода Tableview и IB, я установить делегат и источник данных

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [myArray count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 

    if (!cell) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"] autorelease]; 
    } 

    cell.textLabel.text = [myArray objectAtIndex:[indexPath row]]; 
    NSLog(@"Cell is %@", [myArray objectAtIndex:indexPath.row]); 
    return cell; 
} 

Данные не будут появляться в TableView. Я запустил NSLog, и я вижу, что данные находятся в myArray.

Я добавил NSLog к коду, и он кажется, что код никогда не выполняется. Вопрос в том, как создается мой массив?

Вот код

- (id)init:(NSMutableArray *)theArray 
{ 
    [super init]; 
    countryTable.delegate = self; 
    countryTable.dataSource = self; 

    UITapGestureRecognizer * tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)] autorelease]; 
    [window addGestureRecognizer:tapRecognizer]; 

    myArray = [[NSMutableArray alloc] init]; 
    myArray = theArray; 
    return self; 
} 
+0

Как вы создаете 'NSMutableArray'? – WrightsCS

ответ

5

Ваш основной код является правильным, просто необходимо иметь массив (который вы не предоставили здесь), так что это будет один из примеров:

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil]; 

И вы можете NSLog это: NSLog(@"Count: %i, Array: %@",[myArray count], myArray);

Выход: Который должен вернуться как cell.textLabel.textна вашем примере

Количество: 3, Массив: ( "One", "Два", "Три" )

Вы должны также убедитесь, что вы установили протоколы UITableViewDelegate и UITableViewDataSource в своем заголовке.

0

Попробуйте это -

cell.textLabel.text = [[myArray objectAtIndex:indexPath.row] retain]; 
+1

UILabel.text - это свойство копирования, дополнительное сохранение просто приведет к утечке этого NSString. –

+0

Я попытался сохранить и ту же проблему. Я собираюсь опубликовать обновленный код выше –

1

Я не знаю, если этот вопрос остается открытым, но я дам ему попробовать.

Поскольку я читаю ваш код, я не вижу, где создается экземпляр countryTable, поэтому я предполагаю, что он подключен в InterfaceBuilder? И если это так, countryTable действует только после viewDidLoad. Но вы также можете установить делегат и dataSource в InterfaceBuilder.

Кстати, каждый раз вы меняете источник данных (myArray), вызываете countryTable.reloadData.

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