2010-11-22 9 views
2

私は、tableViewを含むタブの1つを持つtabViewControllerであるiPhoneアプリケーションを開発しています。テーブル内のオブジェクトをタッチして、その特定のオブジェクトに関する情報を含むスプラッシュ画面に移動することができます。ここUITableView ObjectAtIndex

-(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方法didSelectRowAtIndexPath方法でobjectAtIndexへの最初の呼び出しで

-(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]; 
} 

アプリケーションがクラッシュします:

は、ここで私は、配列のtableViewを設定する方法です。コンソールの状態:

010-11-22 12:50:17.113 SSARCアプリ 2 [43470:207] - [のUITableView objectAtIndex:]:インスタンスに送信され、認識されないセレクター 0x601e800 2010-11-22 12:50:17.116 SSARCアプリ2 [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」「はスコープ外」であるということであるという問題が:現在、これは私が持っているものです。私はNSLogを使用すると、viewControllerNameが初期化されるので、その意味が分かりません。それは私が言及しているクラスを見つけることができないという意味ですか?私にお知らせください。

+0

'sitesArray'のプロパティ宣言を表示できます – vikingosegundo

+0

' sitesArray'、 'imagesArray'と' pages'のプロパティ宣言を表示できます – vikingosegundo

+0

こんにちは!これらの配列のプロパティ定義は次のとおりです。@property(nonatomic、retain)NSArray * pages; @property(非構造、保持)NSArray * imagesArray; @property(非構造、保持)NSArray * sitesArray; – Baker

答えて

1

tableUITableViewであるとすると、[table objectAtIndex:indexPath.row]の呼び出しは完全に無意味です。代わりに[pages objectAtIndex:indexPath.row]に電話する必要があるように見えます。

+0

その情報をありがとうございます。テーブルの代わりにページへの呼び出しを変更した後、まだクラッシュしましたが、 'NSInvalidArgumentException'と表示されます。理由: ' - [NSCFString objectForKey:]:インスタンス0x708cに送られたセレクタが認識できません。(!ページ) \t { \t \tページ= [[NSArrayのアロケーション] initWithObjects場合\t: – Baker

+0

私のviewDidLoadもに変更されている "CSLP" @ "SIOP" @ "LSPA" @ "NSLS"、@、 @ "Transfer"、nil]; } \t //(ページでNSStringの*ページ名)用のメニューリスト== sitesArray \t {\t \t [self.sitesArrayのaddObject:[NSMutableDictionary dictionaryWithObjectsAndKeys: \t \t \t \t \t \t \t \t NSLocalizedString([ページ名stringByAppendingString。 @ "")、kTitleKey、 \t \t \t \t \t \t \t NSLocalizedString([ページ名stringByAppendingString: "説明" @] "" @)、kDetailKey、 \t \t \t \t \t \t \t \tニル]。 \t} ページの古い初期化の代わりに。 – Baker

0

objectAtIndexは、NSMutableArrayまたはNSArrayのいずれかを呼び出す必要があります。 UITableviewまたはCFDictionaryまたはCFStringから呼び出すことはできません。したがって、警告が表示された場合警告を最初に解決してからさらに進んでください。

関連する問題