Как использовать NSMutableArray в качестве источника данных для моего UITableView - PullRequest
5 голосов
/ 09 февраля 2011

У меня есть NSMutableArray с данными (жестко запрограммированными).

Я реализовал эти два метода 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;
}

Ответы [ 3 ]

5 голосов
/ 09 февраля 2011

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

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

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

Вывод: Что должно возвращаться как cell.textLabel.text для вашего примера

Количество:3, Array: («Один», «Два», «Три»)

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

1 голос
/ 27 июня 2011

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

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

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

0 голосов
/ 09 февраля 2011

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

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