UITableView ObjectAtIndex - PullRequest
       5

UITableView ObjectAtIndex

2 голосов
/ 23 ноября 2010

Я разрабатываю приложение для iPhone, которое представляет собой tabViewController с одной из вкладок, включая tableView.Можно коснуться объектов в таблице, чтобы перейти на заставку с информацией об этом конкретном объекте.

Вот как я настраиваю массив tableView:

 -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

 //each table view cell has its own identifier. 
 static NSString *cellIdentifier = @"CellIdentifier"; 
 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

 if (cell == nil)
 {
  cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier] autorelease];
 }

 NSUInteger row = [indexPath row]; 

 cell.textLabel.text = [sitesArray objectAtIndex:row];
 cell.imageView.image = [imagesArray objectAtIndex:row];

 cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

 return cell; 
}

    - (void)viewDidLoad {

  NSArray *pageHolder = [[NSArray alloc] initWithObjects:@"CSLP", @"NSLS", @"LSPA", @"SIOP", @"Transfer", nil];
  self.pages = pageHolder;
  [pageHolder release]; 

  NSArray *sites = [[NSArray alloc] initWithObjects:@"CSLP", @"NSLS", @"LSPA", @"SIOP", @"Transfer Vision Program ", nil];
 self.sitesArray = sites; 

 UIImage *cslp = [UIImage imageNamed:@"CSLP LOGO.png"]; 
 UIImage *nsls = [UIImage imageNamed:@"NSLS LOGO.png"]; 
 UIImage *lspa = [UIImage imageNamed:@"LSPA LOGO.png"]; 
 UIImage *siop = [UIImage imageNamed:@"SIOP LOGO.png"]; 
 UIImage *transfer = [UIImage imageNamed:@"TRANSFER LOGO.png"]; 
 NSArray *images = [[NSArray alloc] initWithObjects: cslp, nsls, lspa, siop, transfer, nil]; 
 [sites release]; 
 self.imagesArray = images; 

 UIButton* modalViewButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 [modalViewButton addTarget:self action:@selector(modalViewAction:) forControlEvents:UIControlEventTouchUpInside];
 UIBarButtonItem *modalBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:modalViewButton];
 self.navigationItem.rightBarButtonItem = modalBarButtonItem;
 [modalBarButtonItem release];

 [self.table reloadData];
}

А вот мой метод didSelectRowAtIndexPath

-(void) tableView:(UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath
{
 NSInteger row = [indexPath row];

 NSMutableDictionary *rowData = [table objectAtIndex:indexPath.row];
 UIViewController *targetViewController = [rowData objectForKey:kViewControllerKey];
 if (!targetViewController)
 {
        // The view controller has not been created yet, create it and set it to our menuList array
        NSString *viewControllerName = [[pages objectAtIndex:indexPath.row] stringByAppendingString:@"ViewController"];
        targetViewController = [[NSClassFromString(viewControllerName) alloc] initWithNibName:viewControllerName bundle:nil];
        [rowData setValue:targetViewController forKey:kViewControllerKey];
  [targetViewController release];
    }

 SSARC_App_2AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
 [delegate.orgsNavigationController pushNavigationItem:targetViewController animated:YES];

 [delegate release];
 }

Приложение падает при первом вызове objectAtIndex в didSelectRowAtIndexPathметод.Консоль сообщает:

010-11-22 12: 50: 17.113 SSARC App 2 [43470: 207] - [UITableView objectAtIndex:]: нераспознанный селектор, отправленный экземпляру 0x601e800 2010-11-22 12: 50: 17.116 Приложение 2 SSARC [43470: 207] * Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [UITableView objectAtIndex:]: нераспознанный селектор, отправленный экземпляру 0x601e800' * Стек вызовов впервый бросок:

Теперь у меня есть предупреждение о том, что «UITableView может не отвечать на ObjectAtIndex».Я предполагаю, что это главная проблема здесь, однако я не уверен, как ее решить.Интересно, что я везде искал эту проблему и нигде не могу ее найти, поэтому мне любопытно узнать, сталкивался ли кто-нибудь с этой проблемой и как ее решить.Будем признательны любому совету.Дайте мне знать, если вам понадобится дополнительная информация.


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

NSMutableDictionary *rowData = [self.menuList objectAtIndex:indexPath.row];
UIViewController *targetViewController = [rowData objectForKey:kViewControllerKey];
if (!targetViewController)
{
    // The view controller has not been created yet, create it and set it to our menuList array

NSString *viewControllerName = [[pages objectAtIndex:indexPath.row] stringByAppendingString:@"ViewController"];

targetViewController = [[NSClassFromString(viewControllerName) alloc] init];//WithNibName:viewControllerName bundle:nil];
    NSLog(@"targetViewController: %@", targetViewController); 

    [rowData setValue:targetViewController forKey:kViewControllerKey];
    [targetViewController release];
}


SSARC_App_2AppDelegate *delegate = (SSARC_App_2AppDelegate*)[[UIApplication sharedApplication] delegate]; 
[[delegate orgsNavigationController] pushViewController:targetViewController animated:YES];

[delegate release]; 

delegate = nil; 

Проблема, о которой сообщает отладчик, заключается в том, что viewControllerName имеет значение «Out of Scope».Я не очень понимаю, что это значит, потому что когда я использую NSLog, viewControllerName инициализируется.Означает ли это, что он не может найти класс, на который я ссылаюсь?Пожалуйста, дайте мне знать.

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

Предполагая, что table является вашим UITableView, вызов [table objectAtIndex:indexPath.row] совершенно бессмысленный.Мне кажется, ты должен звонить [pages objectAtIndex:indexPath.row].

0 голосов
/ 06 июля 2013

objectAtIndex должен вызываться либо для NSMutableArray, либо для NSArray. Вы не можете вызвать его из UITableview или CFDictionary или CFString. Поэтому, если вы получаете какое-либо предупреждение, сначала решите его, а затем продолжайте.

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