Сбой приложения при установке UITableViewCell: textLabel: text - PullRequest
2 голосов
/ 12 января 2012

Я создаю приложение iPad с разделенным видом.Когда пользователь нажимает элемент панели кнопок в главном представлении, отображается модальный режим.Этот модал имеет текстовое поле и имеет IBAction для получения возвратов с клавиатуры.

При возврате с клавиатуры создается новый экземпляр моего класса Farm (код ниже).Этот экземпляр затем добавляется в массив, который хранится в моем делегате.Затем я пытаюсь перезагрузить таблицу MasterViewController.После этой перезагрузки приложение вылетает на cell.textLabel.text с ошибкой EXC_BAD_ACCESS.

Farm *current = [delegate.arrayOfFarms objectAtIndex:indexPath.row];
cell.textLabel.text = [current getFarmTitle];

Если я спрашиваю массив в делегате, сколько у него элементов, оно действительно покажет текущую сумму, даже.Это то, что странно для меня во всем этом: экземпляры Фермы, кажется, существуют.

У меня есть экземпляры AppDelegate как в моих MasterViewController, так и в моих NewFarmNamingView классах.Экземпляр в Master должен заполнить таблицу.Экземпляр в NewFarm должен добавить недавно созданный Farm к делегату.Код ниже.

Сегменты из класса NewFarmNamingView:

- (IBAction) keyboardDonePushed:(id)sender
{
    // create a Farm and add it to the delegate
    NSString *text = newFarmTextField.text;
    Farm *newFarm = [[Farm alloc] init];
    [newFarm setFarmTitle:text];
    [[delegate arrayOfFarms] addObject:newFarm];
    [newFarm release];

    NSLog(@"Added farm: %@" , text);

    // dismiss the view
    [self closeView:nil];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // initialize the delegate
    delegate = [[UIApplication sharedApplication] delegate];
}

Сегменты из класса Farm

- (void) setFarmTitle : (NSString *) _farmTitle
{
    farmTitle = _farmTitle;
}

- (NSString *) getFarmTitle
{
    return farmTitle;
}

// NSCoding Methods
- (void) encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:farmTitle forKey:@"kFarmTitle"];
}

- (id) initWithCoder:(NSCoder *)aDecoder
{
    farmTitle = [aDecoder decodeObjectForKey:@"kFarmTitle"];
    return self;
}

// Initialization method
- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

1 Ответ

1 голос
/ 12 января 2012

Из ссылки на среду выполнения: "objc_msgsend отправляет сообщение получателю и ожидает простое возвращаемое значение."

Я поставлю вам все, что вы возвращаете (если вы возвращаете что-либо ввсе) в этом методе класса getTitleFarm возвращает неправильное значение.Это должно быть NSString.Будьте абсолютно уверены, что он возвращает строку NSString, а не что-нибудь еще.

Если вам нужно использовать метод respondsToSelector, чтобы увидеть, выпускается ли класс, попробуйте:

if([current respondsToSelector:@selector(getFarmTitles)])  {.    [current getFarmTitle];
} 
else {
NSLog:(@"FAILURE!!");
}

РЕДАКТИРОВАТЬ: возможно, вы вообще не сохраняете или даже не создаете эту строку,При инициализации оберните его в retain]; сообщение

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