self.tableView insertRowsAtIndexPaths из делегата tableView - PullRequest
1 голос
/ 29 октября 2011

Так что я решил попробовать создать собственное простое приложение. Пожалуйста, будьте спокойны, я новичок во всем этом! Идея заключается в следующем. Для iPad есть один контроллер вида с текстовым полем и текстовым полем. Текстовое поле принимает заголовок, а текстовое поле - тело отчета. На странице есть кнопка для отправки отчета, которая объединяет два текста в объект и добавляет его в табличное представление в том же контроллере представления. Я установил контроллер представления как делегат с <UITableViewDelegate, UITableViewDataSource> в моем заголовочном файле. Мой табличный вид отлично работает для добавления элементов в методе viewDidLoad. Но добавление элементов из текстового ввода через UIB-кнопку, подключенную к -(IBAction) addItem, сбрасывается с: Property 'tableView' not found on object of type 'ReportsViewController'

- (IBAction)addReportItem
{
int newRowIndex = [reports count];

ReportObject *item = [[ReportObject alloc] init];
item.title = @"A new title";
item.reportText = @"A new text";
[reports addObject:item];

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:newRowIndex inSection:0];
NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
[self.tableView insertRowsAtIndexPaths:indexPaths   withRowAnimation:UITableViewRowAnimationAutomatic];
}

Я понимаю, что пытаюсь вызвать метод в моем объекте, но у меня есть другие вызовы метода для tableView, которые работают нормально. т.е. * +1008 *

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

Я думал, что это вопрос делегирования. Я знаю, что что-то упустил, но, как я уже сказал, я новичок во всем этом и везде искал ответ перед публикацией. Что мне нужно сделать, чтобы отправить мое IBAction сообщение tableView?

Ответы [ 2 ]

1 голос
/ 16 мая 2012

У меня была такая же проблема.Помогло наследование View Controller от UITableViewController вместо UIViewController.Не использовать имена протоколов в угловых скобках.Затем TableView связывается с источником данных и делегируется через раскадровку (соответственно InterfaceBuilder).

Родительский класс UITableViewController имеет определенный IBOutlet tableView.

MyViewController.h:

@interface MyViewController : UITableViewController
1 голос
/ 29 октября 2011

У вас есть переменная экземпляра tableView в вашем .h файле контроллера представления?

Причина, по которой вы можете получить к нему доступ в методах делегата и источника данных, заключается в том, что они передаются как часть методов.

Вам потребуется добавить IBOUTLET tableView ivar и подключитьсяэто к tableView в вашем .xib.

Или, возможно, ваш ivar для tableView назван как-то еще?

Удачи.

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