Нераспознанный селектор при использовании UITableView в подпредставлении - PullRequest
2 голосов
/ 30 августа 2010

Я создаю приложение, которое использует TabBarController для отображения нескольких других представлений. В одном из этих представлений я использую контроллер навигации для навигации по некоторым табличным данным. Когда пользователь нажимает на эту вкладку, я загружаю в NavigationController, который в свою очередь загружает TableView, который я использую. Проблема в том, что я получаю следующую ошибку при загрузке контроллера TableView:

-[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x6b37b10

Я везде читал, что этот тип ошибки обычно происходит из-за неправильного соединения в IB или что класс неверен в контроллере представления. Вот мой код и скриншоты IB, чтобы помочь отладить это для меня.

Заранее спасибо!

Ошибка, которую я получаю

alt text Соединения TableView в IB

alt text Класс владельца файла alt text Мой интерфейсный файл

@interface FAQListViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> {

    // Dictionary that will hold the FAQ Key/Values
    NSMutableArray  *arrFAQData;

}

Осуществление

@implementation FAQListViewController

// Implementation for UITableView numberOfRowsInSection protocol
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [arrFAQData count];

}

// Implementation for UITableView cellForRowAtIndexPath protocol
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // See if we have any cells available for reuse
    UITableViewCell *objCell = [tableView dequeueReusableCellWithIdentifier:@"FAQCell"];
    if (objCell == nil) {

        // No reusable cell exists, so let's create a new one
        objCell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: @"FAQCell"];

    }

    // Give it data
    NSDictionary *objRow = [arrFAQData objectAtIndex: [indexPath row]];
    objCell.textLabel.text = [objRow valueForKey:@"Title"];

    // Return the created cell
    return objCell;


}

// Selection Event Handler
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // Get the value for the selected key
    NSDictionary *dictRow = [arrFAQData objectAtIndex:[indexPath row]];
    NSString *strURL = [dictRow valueForKey: @"URL"];

    // Alert result
    UIAlertView *objAlert;
    objAlert = [[UIAlertView alloc] initWithTitle:@"Alert" message: strURL delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 

    // Release created objects
    [objAlert show];
    [objAlert release];

    // Deselect row
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

}
- (void)viewDidLoad {

    // Pull in FAQ from Plist
    NSString *strFAQPlist = [[NSBundle mainBundle] pathForResource:@"FAQData" ofType:@"plist"];
    arrFAQData = [[NSMutableArray alloc] initWithContentsOfFile: strFAQPlist];


    [super viewDidLoad];
}

- (void)dealloc {

    [arrFAQData release];


    [super dealloc];
}

Ответы [ 2 ]

1 голос
/ 31 августа 2010

Прежде всего, это хорошо продуманный вопрос, я желаю всем размещать скриншоты и полный исходный код. : -)

Похоже, что сообщение отправляется универсальному UIViewController, а не FAQListViewController. Это говорит мне, что, возможно, когда вы создаете экземпляр FAQListViewController, вместо этого вы создаете экземпляр UIViewController?

Чтобы создать список часто задаваемых вопросов, вы должны использовать что-то вроде:

[[FAQListViewController alloc] initWithNibName: @"FAQViewController" bundle: nil];

Ваша ошибка может возникнуть, если вы вместо этого создадите ее как:

[[UIViewController alloc] initWithNibName: @"FAQViewController" bundle: nil];

0 голосов
/ 30 августа 2010

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

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