iOS UITableView получает EXC_BAD_ACCESS, когда пользователь взаимодействует - PullRequest
0 голосов
/ 31 августа 2011

Я запускаю свое первое приложение для iOS, и я сталкиваюсь с ошибкой, которая возникает только тогда, когда пользователь касается UItableView. Это приложение является помощником для спряжения глаголов в японском языке. Вот как это работает:

У меня есть первое представление, которое запрашивает у пользователя японский глагол в алфавите. Я создаю экземпляр класса Conjuger, который копирует введенный глагол и подготавливает анализ. Я создаю экземпляр моего resultViewController. Я связываю свой объект сопряжения со свойством этого контроллера. Я модально отображаю вид. ResultViewController отображает все нормально, все данные загружаются из объекта Conjuger, созданного из его родительского представления.

Но, если я коснусь экрана, чтобы прокрутить представление, я получу ошибку EXC_BAD_ACCESS. Я пытался отладить его, но я еще недостаточно хорош, чтобы найти, в чем проблема. Я подозреваю, что мой объект сопряжения будет освобожден. Нечетным является то, что атрибут этого объекта "глагол" все еще не поврежден, но другие свойства пусты ... Почему?

Вот мое объявление объекта Conjuger:

@interface Conjuger : NSObject
{
    NSString *verb;

    //parties qui concernent l'analyse du verbe
    //=========================================
    int group;
    NSString *verbEnd;  //la terminaison du verbe
    NSString *verbBase; //la base du verbe que l'on emploi dansl es conjugaisons

    //declinaisons possibles
    //======================
    /*
     Les clefs sont :
     pre : present ou pas : passé
     a : affirmatif ou n : négatif
     n : neutre ou p : poli
     */
    NSMutableDictionary *declinaisons;
    //les declinaisons vont etre separees en section pour la table view
    int declinaisonsSections;
    //Titres des sections
    NSArray *sectionsTitles;
}

@property (nonatomic, retain) NSString *verb;
@property (nonatomic) int group;
//@property (nonatomic, retain) NSMutableDictionary *declinaisons;

-(Conjuger *) initWithVerb:(NSString *) verb_;

//analyse du verb (recherche du groupe etc...)
-(int) _analyse;

//action de conjugaison du verbe
-(BOOL) conjugate;

//nombre de sections disponibles
-(NSInteger) sectionsCount;

//nombre de lignes dans une section donnee
-(NSInteger) sectionLinesCount:(NSInteger) sectionId;

//permet deretourner le titre d'une section
-(NSString *) sectionTitle:(NSInteger) sec;

//permet de retourner une declinaison pour une section precise
-(NSString *) declinaisonsBySection:(int) sec sectionLine:(int) secline;

@end

Мой UITableView не имеет делегата, а только мой ResultViewController в качестве источника данных. Ошибка EXC_BAD_ACCESS появляется в методе titleForHeaderInSection . Этот метод содержит:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [conjug sectionTitle:section];
}

Методы вызываются после загрузки UITableView, который я подозреваю, но так как этот контроллер не является UITableViewDelegate, почему этот метод вызывается для действий пользователя? Кстати, свиток ...

Мой UITableView не занимает весь экран и помещается в представление.

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

Редактировать: вот код, в котором я создаю экземпляр объекта Conjuger и назначаю его контроллеру второго представления

//creation de l'objet conjuger qui servira a afficher les resultats dans la vue modale
        Conjuger *conjug = [[[Conjuger alloc] initWithVerb:verb.text] autorelease];

        //chargement de la vue modale
        ConjugerResultsViewController *res = [[[ConjugerResultsViewController alloc] init] autorelease];
        res.conjug = conjug;

        //affichage
        [self presentModalViewController:res animated:YES];

У меня есть авто-релиз, но я не чувствую, что мой объект будет освобожден или не полностью, если это возможно. Мой атрибут глагола "глагол" по-прежнему содержит данные, но не мои разделыTitles ... Должен ли я объявить все свои свойства с @ property (nonatomic, retain) ? Я думал, что @property будет использоваться, только если наши атрибуты должны вызываться извне нашего объекта, я не прав? Я сейчас растерялся: (

Но я изменил свои атрибуты с помощью @property, и я получаю к ним доступ "self", как это было предложено, и ЭТО РАБОТАЕТ! Но все же я не понимаю, почему ... Я пытаюсь найти более объективные чтения c, мои курсы по C теперь далеко позади меня -_-.

Я буду исследовать Apple-i в Xcode4, как это было предложено, это может быть полезно для дальнейших проблем.

Спасибо за ваше чтение и вашу помощь.

1 Ответ

0 голосов
/ 31 августа 2011

Если сбой произошел в [conug sectionTitle:], я бы предположил, что заголовки ваших разделов - зомби. Убедитесь, что вы сохранили массив заголовков разделов.

...