TitleForHeaderInSection throwing EXC_BAD_ACCESS - PullRequest
0 голосов
/ 15 ноября 2011

Я пытаюсь создать общий UITableView в своем приложении для iPhone. У меня есть UITableView, который заполняет данные с помощью массива через цикл запроса SELECT. Я добавляю данные в мой массив и заполняю массив в cellForRowAtIndexPath:. Я получаю заголовок раздела, используя этот массив, и используя метод сортировки, я помещаю заголовки разделов в Array1.

Я бы хотел, чтобы titleForHeaderInSection: работал, если в разделе 0 будет указано статическое имя заголовка, а в разделах 1 и более поздних будет универсальный, то есть имя заголовка будет получено из Array1.

Я не уверен, как мне создать эту логику, поскольку приложение всегда выдает EXC_BAD_ACCESS с кодом ниже.

Моя логика: я сохраняю счетчик массива в int и проверяю, больше ли значение 0. Если это так, я добавляю заголовок раздела для objectAtIndex:0, в противном случае я использую статический. Но когда счет достигает 2, для секции 2 и objectAtIndex:1 он ломается и выдает EXC_BAD_ACCESS.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    int value = [[self Array1] count];
    if(section == 0)
        return @"Countries";

    if (value > 0) {
        if (section == value){
        return [[self Array1] objectAtIndex:section - 1];
    }
    }   
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    int count = [[self Array1] count];
    return count + 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section      
{
    int value = [[self Array1] count];
    if (section == 0) {
    return [self.Array count];
    }

    if (value > 0) {
        if (section == [[self Array1] count])  {
            NSString *initialLetter = [[self Array1] objectAtIndex:section - 1];

            // get the array of elements that begin with that letter
            NSArray *elementsWithInitialLetter = [self elementsWithInitialLetter:initialLetter];

            // return the count
            return [elementsWithInitialLetter count];
        }
    }

}

1 Ответ

0 голосов
/ 15 ноября 2011

Похоже, вам просто не хватает сохранения на iVar, поддерживающем метод Array1.объявите массив как свойство:

@property (nonatomic, retain) NSArray* datastore;

Затем кэшируйте значение, на которое вы ссылаетесь, в методе Array1 этого метода (возможно, в viewDidLoad).

self.datastore = [self Array1];

Затем замените всеостальные ссылки на [self Array1] с self.datastore.Построить запустить и посмотреть, если он все еще падает.(Не забудьте установить self.datastore = nil в свой расклад!

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