Search code examples
iphoneiosxcodetableviewmaster-detail

DetailView shows only one entry of Tableview


I've got a Master-Detail Applicaton in Xcode with a TableView and a SearchDisplayController.
In the TableView I have got a NSArray with 10 entries.
If I use the Searchbar, the DetailView shows correctly the entry I clicked on.
But if I do not use the Searchbar and click in the TableView on an entry, the DetailView every time shows me the first entry of the TableView.
What can I do to fix it?

MasterViewController.m: https://i.sstatic.net/E7fDn.png

MasterViewController.h:

#import <UIKit/UIKit.h>  
@interface DPMasterViewController : UITableViewController  
@property (nonatomic, strong) IBOutlet UITableView *tableView;  
@end  

DetailViewController.m: https://i.sstatic.net/JkR9C.png

DetailViewController.h:

#import <UIKit/UIKit.h>  
@interface DPDetailViewController : UIViewController  
@property (strong, nonatomic) id detailItem;  
@property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel;  
@end 

Sorry that I use pictures, but I think it is easier for you to check. :)
I hope you can help me!
If anything is missing, just tell me.

EDIT:

In This Method after the else every time the indexPath.row = 0. I don't know how to fix it :(

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showDetail"]) {
    DPDetailViewController *destViewController = segue.destinationViewController;

    NSIndexPath *indexPath = nil;

    if ([self.searchDisplayController isActive]) { 
        indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
        destViewController.detailItem = [searchItemList objectAtIndex:indexPath.row];
    } else {
        indexPath = [self.tableView indexPathForSelectedRow];
        destViewController.detailItem = [itemList objectAtIndex:indexPath.row];

    }
  }    
}

Solution

  • It looks like you are not performing any actions when you click on a cell of the tableView that is not part of the searchDisplayController, so try to change your tableView:didSelectRowAtIndexPath: method to

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        [self performSegueWithIdentifier:@"showDetail" sender:self];
    }