UITableView
plistファイルからの表示データがあります。このテーブルビューでNSArray
は、plistファイルの内容からを作成し、データを各セルにフィードしました。ただし、セルがタップされると、次のテーブルビューコントローラーがタップされたセルのインデックスパスを認識し、このビューコントローラーが配列内の詳細を表示するアイテムを認識できるようにする必要があります。私は次の方法を試しました:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
staffDetailView = [[StaffDetailViewController alloc] init];
[staffDetailView setSelectedIndexPath:indexPath];
[self performSegueWithIdentifier:@"pushStaffDetailView" sender:self];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
上記では、タップしたセルのインデックスパスをNSIndexPath
、新しいViewControllerで作成したオブジェクトに渡そうとしています。
次のテーブルビューコントローラのヘッダーファイル:
@interface StaffDetailViewController : UITableViewController {
NSIndexPath *selectedIndexPath;
NSArray *staffArray;
}
@property (nonatomic, retain) NSIndexPath *selectedIndexPath;
@property (nonatomic, strong) NSArray *staffArray;
ここでselectedIndexPath
は、前のViewControllerで設定されたオブジェクトを定義します。
しかしselectedIndexPath
、関連データを表示するためにオブジェクトにアクセスしようとすると、オブジェクトは次のように見えますnil
。
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSString *header;
if (section == 0) {
NSString *name = [[staffArray objectAtIndex:selectedIndexPath.row] objectForKey:@"Staff Member"];
NSArray *splitStaffArray = [name componentsSeparatedByString:@", "];
NSString *lastName = [splitStaffArray objectAtIndex:0];
NSString *firstName = [splitStaffArray objectAtIndex:1];
NSString *consolidatedName = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
NSString *assignment = [[staffArray objectAtIndex:selectedIndexPath.row] objectForKey:@"Assignment"];
header = [NSString stringWithFormat:@"%@\n%@", consolidatedName, assignment];
return header;
}
return nil;
}
selectedIndexPath
オブジェクトに正しくアクセスしていませんか?正しいインデックスパスを次のViewControllerに渡すための優れた方法はありますか?