iPhone搜索结果显示触摸后的描述不正确

时间:2010-12-01 09:13:28

标签: iphone arrays search ios4 uitableview

我的搜索出错了。它正确显示搜索结果,但是当您单击结果中的项目A时,它会打开项目c的描述。

#import "RootViewController.h"

#import "FSDAppDelegate.h"

#import "DetailViewController.h"

@implementation RootViewController

#pragma mark -
#pragma mark Synthesizers

@synthesize mainTableView;
@synthesize contentsList;
@synthesize descArray;
@synthesize bannerImages;
@synthesize childController;
@synthesize searchResults;
@synthesize savedSearchTerm;


#pragma mark -
#pragma mark View methods

- (void)viewDidLoad
{
   NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);


    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Descriptions" ofType:@"plist"];

    NSArray *desc = [[NSArray alloc] initWithContentsOfFile:filePath];
    self.descArray = desc;
    [desc release];

    UIImage *texas = [UIImage imageNamed:@"1andtexas.jpg"];
    UIImage *cali = [UIImage imageNamed:@"2andcalifornia.jpg"];
    UIImage *ny = [UIImage imageNamed:@"3andnewyork.jpg"];
    UIImage *tmark = [UIImage imageNamed:@"1Tmark.jpg"];
    UIImage *walkie = [UIImage imageNamed:@"Walkietalkie.jpg"];
    UIImage *onekh = [UIImage imageNamed:@"Tracingpaper.jpg"];
    UIImage *onetwonine = [UIImage imageNamed:@"diffusion.jpg"];
    UIImage *greycard = [UIImage imageNamed:@"Greycard.jpg"];
    UIImage *oneeighty = [UIImage imageNamed:@"Oneeighty.jpg"];
    UIImage *two = [UIImage imageNamed:@"Two.jpg"];
    UIImage *twofourteen = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twofifteen = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twosixteen = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twotwenty = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twotwentynine = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twofifty = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twofiftyone = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twofiftytwo = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twofiftythree = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twofiftyfour = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twofiftyfive = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twofiftysix = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twofiftyseven = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *twofiftyeight = [UIImage imageNamed:@"Diffusion.jpg"];
    UIImage *thirtytwohk = [UIImage imageNamed:@"3200k.jpg"];



    NSArray *banners = [[NSArray alloc] initWithObjects:
                        texas,
                        cali,
                        ny,
                        tmark,
                        walkie,
                        onekh,
                        onetwonine,
                        greycard,
                        oneeighty,
                        two,
                        twofourteen,
                        twofifteen,
                        twosixteen,
                        twotwenty,
                        twotwentynine,
                        twofifty,
                        twofiftyone,
                        twofiftytwo,
                        twofiftythree,
                        twofiftyfour,
                        twofiftyfive,
                        twofiftysix,
                        twofiftyseven,
                        twofiftyeight,
                        thirtytwohk,
                        nil];

    self.bannerImages = banners;

    [banners release];


    [super viewDidLoad];



    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:
                             @"#1 or NUMBER ONE",
                             @"#2 or NUMBER TWO",
                             @"#3 or NUMBER THREE",
                             @"1 or ONE",
                             @"10-100,10-1,10-200,10-2,10-4 and 20",
                             @"1000H PAPER",
                             @"129 or HEAVY FROST",
                             @"18% GRAY or GREY CARD",
                             @"180 DEGREE RULE",
                             @"2 or TWO",
                             @"214 or FULL TOUGH SPUN",
                             @"215 or HALF TOUGH SPUN",
                             @"216 or FULL WHITE DIFFUSION",
                             @"220 or WHITE FROST",
                             @"229 or QUARTER TOUGH SPUN",
                             @"250 or HALF WHITE DIFFUSION",
                             @"251 or QUARTER WHITE DIFFUSION",
                             @"252 or EIGHTH WHITE DIFFUSION",
                             @"253 or FULL HAMPSHIRE",
                             @"254 or NEW HAMPSHIRE",
                             @"255 or HOLLYWOOD FROST",
                             @"256 or HALF HAMPSHIRE FROST",
                             @"257 or QUARTER HAMPSHIRE FROST",
                             @"258 or EIGHTH HAMPSHIRE FROST",
                             @"3200K or TUNGSTEN",
                             nil];
    [self setContentsList:array];
    [array release], array = nil;

    if ([self savedSearchTerm])
    {
        [[[self searchDisplayController] searchBar] setText:[self savedSearchTerm]];
    }

    NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);
}

- (void)viewWillAppear:(BOOL)animated
{
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

    [super viewWillAppear:animated];

    [[self mainTableView] reloadData];

    NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);
}

#pragma mark -
#pragma mark Table view datasource methods

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {

    NSMutableArray *toBeReturned = [[NSMutableArray alloc]init];
    for(char c = 'A'; c <= 'Z'; c++) [toBeReturned addObject:[NSString stringWithFormat:@"%c",c]];
    return toBeReturned;
}

-(NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

    NSInteger rows;

    if (tableView == [[self searchDisplayController] searchResultsTableView])
        rows = [[self searchResults] count];
    else
        rows = [[self contentsList] count];


    NSLog(@"rows is: %d", rows);
    NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);

    return rows;

    }

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

    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

    NSInteger row = [indexPath row];
    NSString *contentForThisRow = nil;

    if (tableView == [[self searchDisplayController] searchResultsTableView])
        contentForThisRow = [[self searchResults] objectAtIndex:row];
    else
        contentForThisRow = [[self contentsList] objectAtIndex:row];

    static NSString *CellIdentifier = @"CellIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    [[cell textLabel] setText:contentForThisRow];

    //cell.textLabel.text = [contentsList objectAtIndex:indexPath.row];

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);

    return cell;
}

#pragma mark -
#pragma mark Table view delegate methods

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 50;
}

-(NSString *) tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
    return @"Film Set Decipher";
}

-(void) tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

    FSDAppDelegate *delegate = (FSDAppDelegate *)[[UIApplication sharedApplication] delegate];
    DetailViewController *detailVC = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    detailVC.banner = [bannerImages objectAtIndex:indexPath.row];
    detailVC.description = [descArray objectAtIndex:indexPath.row];
    detailVC.title = [contentsList objectAtIndex:indexPath.row];
    self.childController = detailVC;
    [delegate.navigationController pushViewController:childController animated:YES];


    [detailVC release];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);
}

#pragma mark -
#pragma mark UISearchDisplayController Delegate Methods

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchString:(NSString *)searchString
{
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

    [self handleSearchForTerm:searchString];

    NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);
    return YES;
}

- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

    [self setSavedSearchTerm:nil];

    [[self mainTableView] reloadData];

    NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);
}
#pragma mark -
#pragma mark Memory Management

- (void)didReceiveMemoryWarning {
    NSLog(@"Memory warning!");
    [super didReceiveMemoryWarning];
}
- (void)dealloc
{
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

    [mainTableView release]; mainTableView = nil;
    [contentsList release]; contentsList = nil;
    [descArray release]; descArray = nil;
    [bannerImages release]; bannerImages = nil;
    [childController release]; childController = nil;
    [searchResults release], searchResults = nil;
    [savedSearchTerm release], savedSearchTerm = nil;

    [super dealloc];

    NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);
}

- (void)viewDidUnload {
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

    self.mainTableView = nil;
    self.contentsList = nil;
    self.descArray = nil;
    self.bannerImages = nil;
    self.childController = nil;

    [super viewDidUnload];

    [self setSavedSearchTerm:[[[self searchDisplayController] searchBar] text]];

    [self setSearchResults:nil];

    NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);

}

- (void)handleSearchForTerm:(NSString *)searchTerm
{
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

    [self setSavedSearchTerm:searchTerm];

    if ([self searchResults] == nil)
    {
        NSMutableArray *array = [[NSMutableArray alloc] init];
        [self setSearchResults:array];
        [array release], array = nil;
    }

    [[self searchResults] removeAllObjects];

    if ([[self savedSearchTerm] length] != 0)
    {
        for (NSString *currentString in [self contentsList])
        {
            if ([currentString rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                [[self searchResults] addObject:currentString];
            }
        }
    }

    NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);
}

@end

我不确定,我是从plist中提取我的描述。看起来像detailVC.title = [contentsList objectAtIndex:IndexPath.row];还需要能够使用descArray吗?想法?

提前致谢!

1 个答案:

答案 0 :(得分:0)

在这种情况下你应该使用两个不同的数组。

您的代码应如下所示:

if(searching==YES)

{

//retrieve the values from source array

}

else

{

//retrieve the values from filtered array

}