本地搜索功能以及整理数据按照日期来分组

来源:互联网 发布:新网域名证书 编辑:程序博客网 时间:2024/05/29 18:13

本地搜索功能以及整理数据按照日期来分组

#import <UIKit/UIKit.h>

@interface SearchResultTableView : UITableViewController 

< UIAlertViewDelegate , UISearchDisplayDelegate , UISearchBarDelegate >

{

    //讲之前CheckAndModifyView查询后的结果存到这两个数组中

    NSArray* searchResultArray;

    NSArray* sizeArray;

    

     

    //------------------改变风格用字典存储,并且以日期来分类--------------------//

    

    //用于存储日期

    NSMutableArray* dateMutableArray_;

    

    //用于存储searchResultArray里的数组,没有改变过的数组,只是按日期来分组

    NSMutableArray* originalMutableArray_;

    //存储全部已经分组的数组

    NSMutableArray* allOriginalMutableArray_;

    //用于存储原始数据的字典

    NSMutableDictionary* originalMutableDictionary_;

    

    //用于存储将原始数据整理后的可变数组

    NSMutableArray* arrangeMutableArray_;

    //存储全部已经分组的数组

    NSMutableArray* allArrangeMutableArray_;

    //用于存储整理后数据的字典

    NSMutableDictionary* arrangeMutableDictionary_;

    

    

    //------------------------------------------------------------------//

    

    

    

    //************增加本地查找功能************//   

    

    UISearchDisplayController* searchDisplayController_;

    //查询后原始数据放到数组中

    NSMutableArray* resultOriginalMutableArray_;

    //查询后整理过的数据放到数组中

    NSMutableArray* resultArrangeMutableArray_;

    

    NSMutableArray* resultDatesMutableArray_;

    NSMutableDictionary* resultOriginalMutableDictionary_;

    NSMutableDictionary* resultArrangeMutableDictionary_;

    

    //未审核的

    NSMutableArray* unauditedResultMutableArray_;

    

    //************************************//

    

    //公共方法中用到的  

    NSMutableArray* datesMutableArray_;

    NSMutableArray* publicAllOriginalMutableArray_;

    NSMutableArray* publicAllArrangeMutableArray_;

    

    //=====分开两个数组 全部” 与 未审核” 数组,一开始就初始化,之后都不会改变的数组=========//

    

    //全部数组

//    NSMutableArray* unchangingAllDatesMutableArray_;

    NSMutableDictionary* unchangingAllOriginalMutableDictionary_; 

    NSMutableDictionary* unchangingAllArrangeMutableDictionary_;

    //未审核数组

//    NSMutableArray* unauditedDatesMutableArray_;

    NSMutableDictionary* unauditedOriginalMutableDictionary_; 

    NSMutableDictionary* unauditedArrangeMutableDictionary_;

    

    //==========================================================================//

}

//讲之前CheckAndModifyView查询后的结果存到这两个数组中

@property ( nonatomic , retain ) NSArray* searchResultArray;

@property ( nonatomic , retain ) NSArray* sizeArray;

@end

#import "SearchResultTableView.h"

@implementation SearchResultTableView

//讲之前CheckAndModifyView查询后的结果存到这两个数组中

@synthesize searchResultArray;

@synthesize sizeArray;

#pragma mark The method of collating data  //整理数据的方法

- (void)soutOutArray:(NSArray*)searchResultArray_

{

    //--------------------------------------//

    //这样做的原因是避免下次再用时不会再用同一块内存

    //释放内存

    [ originalMutableArray_ release ];

    //重新分配内存

    originalMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //释放内存

    [ arrangeMutableArray_ release ];

    //重新分配内存

    arrangeMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    

    

    //先清除所有数组中的元素

    [ datesMutableArray_ removeAllObjects ];

    [ originalMutableArray_ removeAllObjects ];

    [ arrangeMutableArray_ removeAllObjects ];

    [ publicAllArrangeMutableArray_ removeAllObjects ];

    [ publicAllOriginalMutableArray_ removeAllObjects ];

    

    NSLog( @"searchResultArray_%@" , searchResultArray_ );

    

    //新建内部用的2个字典,和一个日期数组

    datesMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //通过这个函数来整理数据

    for ( NSArray* originalArray in searchResultArray_ )

    {

        

        //#################\3\ 整理数据 #################################//

        

        NSString* messageString = [ NSString stringWithFormat: @"%@  %@-%@,%@" , [ originalArray objectAtIndex: 4 ] , [ originalArray objectAtIndex: 2 ] , [ originalArray objectAtIndex: 5 ] , [ originalArray objectAtIndex: 6 ] ];

        //        NSLog( @"%@" , messageString );

        //#############################################################//

        

        //=======================\1\首先解决日期数组=================================//

        //打印原始数组

        NSLog( @"原始数据%@" , originalArray );

        

        //读取每个数组中的日期

        NSString* dateLongString = [ NSString stringWithFormat: @"%@" , [ originalArray objectAtIndex: 1 ] ];

        NSString* dateShortString = [ dateLongString substringToIndex: 10 ];

//               NSLog( @"dateShortString %@" , dateShortString );

        

        //datesMutableArray_数组为空的时候添加第一个日期

        if ( ![ datesMutableArray_ count ] )

        {

            [ datesMutableArray_ addObject: dateShortString ];

        }

        

//            NSLog( @"%d" , [ datesMutableArray_ count ] );

//            NSLog( @"%@" , datesMutableArray_ ); 

        //新建数组存储旧的数组

        NSArray* newDatesArray = [ [ [ NSArray alloc ] initWithArray: [ NSArray arrayWithObject: datesMutableArray_ ] ] autorelease ];

        //        NSLog( @"newDatesArray %@" , newDatesArray ); 

        //        NSLog( @"%@" , [ newDatesArray objectAtIndex: 0 ] );

        //用于标记是否找到

        BOOL foundOutBool = NO; 

        

        //逐个逐个来查看

        NSInteger numberOfDate = 0;

        for ( NSString* date in [ newDatesArray objectAtIndex: 0 ] )

        {

            

            numberOfDate ++;

            //            NSLog( @"时间%@" , date );

            if ( [ date isEqualToString: dateShortString ] )

            {

                foundOutBool = YES;

                //当找到相同日期的数组就将该数组放进同一个数组

                //******有可能会存在找到的日期不是最后一个日期

                if ( numberOfDate == [ [ newDatesArray objectAtIndex: 0 ] count ]    ) 

                {

                    //******\2\整理原始数组*******//

                    [ originalMutableArray_ addObject: originalArray ];

                    

                    //**********************//

                    

                    

                    //#########\3\ 整理数据 ##########//

                    

                    //将整理好的数据,类似于originalMutableArray_ 来导入

                    [ arrangeMutableArray_ addObject: messageString ];

                    

                    //##############################//

                    

                }

                else//******当找到的不是最后的日期则添加到字典里的对应的数组中

                {

                    [ [ publicAllOriginalMutableArray_ objectAtIndex: numberOfDate - 1 ] addObject: originalArray ];

                    [ [ publicAllArrangeMutableArray_ objectAtIndex: numberOfDate - 1 ] addObject: messageString ];

                }

            }

        }

        //******  \1\   \2\ ***************//

        //判断条件系 1)该日期数组没有 2)日期数组没有而且是最后一个

        if ( !foundOutBool ) 

        {

            numberOfDate = 0;

            

            //******\1\*******//

            [ datesMutableArray_ addObject: dateShortString ];

            

            //******\2\整理原始数组*******//

            

            [ publicAllOriginalMutableArray_ addObject: [ [ NSArray arrayWithObject: originalMutableArray_ ] objectAtIndex: 0 ] ];

            //            NSLog( @"** %@" ,  );

            //释放内存

            [ originalMutableArray_ release ];

            //重新分配内存

            originalMutableArray_ = [ [ NSMutableArray alloc ] init ];

            //            NSLog( @"分组%@" , );

            [ originalMutableArray_ addObject: originalArray ];

            //******\2\整理原始数组*******//

            

            

            //#########\3\ 整理数据 ##########//

            [ publicAllArrangeMutableArray_ addObject: [ [ NSArray arrayWithObject: arrangeMutableArray_ ] objectAtIndex: 0 ] ];

            //释放内存

            [ arrangeMutableArray_ release ];

            //重新分配内存

            arrangeMutableArray_ = [ [ NSMutableArray alloc ] init ];

            [ arrangeMutableArray_ addObject: messageString ];

            //##############################//

            

            //当这个数组是最后一个的时候,将它添加到两个数组中

            if ( [ originalArray isEqualToArray: [ searchResultArray_ objectAtIndex: [ searchResultArray_ count ] - 1 ] ] )

            {

                

                [ publicAllOriginalMutableArray_ addObject: [ [ NSArray arrayWithObject: originalMutableArray_ ] objectAtIndex: 0 ] ];

                

                [ publicAllArrangeMutableArray_ addObject: [ [ NSArray arrayWithObject: arrangeMutableArray_ ] objectAtIndex: 0 ] ];

                //                NSLog( @"*** %@" ,  );

            }

            

            

        }

        //如果日期数组有,而且是最后一个

        if ( foundOutBool && [ originalArray isEqualToArray: [ searchResultArray_ objectAtIndex: [ searchResultArray_ count ] - 1 ] ] )

        {

            //            NSLog( @"1**** %@" ,  );

            [ publicAllOriginalMutableArray_ addObject: [ [ NSArray arrayWithObject: originalMutableArray_ ] objectAtIndex: 0 ] ];

            

            [ publicAllArrangeMutableArray_ addObject: [ [ NSArray arrayWithObject: arrangeMutableArray_ ] objectAtIndex: 0 ] ];

            

            //            NSLog( @"2**** %@" ,  );

            NSLog( @"public %@" , publicAllArrangeMutableArray_ );

        }

        //======================================================================//

    }

    

}

#pragma mark - View lifecycle

- (void)viewDidLoad

{

    [super viewDidLoad];

    

    //整理返回的结果

    sumMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //------------------改变风格用字典存储,并且以日期来分类--------------------//

    

    //用于存储日期

    dateMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //用于存储searchResultArray里的数组,没有改变过的数组,只是按日期来分组

    originalMutableArray_ = [ [ NSMutableArray alloc ] init ];

    //存储全部已经分组的数组

    allOriginalMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //用于存储将原始数据整理后的可变数组

    arrangeMutableArray_ = [ [ NSMutableArray alloc ] init ];

    //存储全部已经分组的数组

    allArrangeMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //------------------------------------------------------------------//

    

    //公共方法中用到的  

    datesMutableArray_ = [ [ NSMutableArray alloc ] init ];

    publicAllOriginalMutableArray_ = [ [ NSMutableArray alloc ] init ];

    publicAllArrangeMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //=====分开两个数组 全部” 与 未审核” 数组,一开始就初始化,之后都不会改变的数组=========//

    

    //全部数组

//    unchangingAllDatesMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //未审核数组

//    unauditedDatesMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //==========================================================================//

    

    

    //----------------------- 本地查询后结果 ------------------------------------------//

    

    //查询后原始数据放到数组中

    resultOriginalMutableArray_ = [ [ NSMutableArray alloc ] init ];

    //查询后整理过的数据放到数组中

    resultArrangeMutableArray_ = [ [ NSMutableArray alloc ] init ];

    //result日期数组

    resultDatesMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //将为审核的都整理出来

    unauditedResultMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    //-----------------------------------------------------------------------------//

    

    //############################## 未审核数组 #######################################//

    

    

    for ( NSArray* originalArray in searchResultArray ) 

    {

        //        NSLog( @"%@" , originalArray );

        //        NSLog( @"%@" , [ originalArray objectAtIndex: 7 ] );

        if ( ![ [ originalArray objectAtIndex: 7 ] integerValue ] ) 

        {

            [ unauditedResultMutableArray_ addObject: originalArray ];

//            NSLog( @"未审核%@" , unauditedResultMutableArray_ );

        }

    }

    

    //通过这个函数来整理数据

    [ self soutOutArray: unauditedResultMutableArray_ ];

    

    //整理出两个字典

    

    //未审核数组

    NSMutableArray* unauditedDatesMutableArray = [ [ [ NSMutableArray alloc ] initWithArray: datesMutableArray_ ] autorelease ];

    NSMutableArray* unauditedOriginalMutableArray = [ [ [ NSMutableArray alloc ] initWithArray: publicAllOriginalMutableArray_ ] autorelease ]; 

    NSMutableArray* unauditedArrangeMutableArray = [ [ [ NSMutableArray alloc ] initWithArray: publicAllArrangeMutableArray_ ] autorelease ];

    

    unauditedOriginalMutableDictionary_ = [ [ NSMutableDictionary alloc ] initWithObjects: unauditedOriginalMutableArray forKeys: [ [ NSArray arrayWithObject: unauditedDatesMutableArray ] objectAtIndex: 0 ] ];

    unauditedArrangeMutableDictionary_  = [ [ NSMutableDictionary alloc ] initWithObjects: unauditedArrangeMutableArray forKeys: [ [ NSArray arrayWithObject: unauditedDatesMutableArray ] objectAtIndex: 0 ] ];

    

    //    NSLog( @"unauditedArrangeMutableArray_ %@" , unauditedArrangeMutableArray_ );

    NSLog( @"unauditedArrangeMutableDictionary_ %@" , unauditedArrangeMutableDictionary_ );

    //###############################################################################//

    

    //------------------------- 全部数组 --------------------------------------------//

    

    //通过这个函数来整理数据

    [ self soutOutArray: searchResultArray ];

    //整理出两个字典

    //全部数组

    //对应tableview 中的接口 3个数组 2个字典

    

    dateMutableArray_ = datesMutableArray_ ; 

    allOriginalMutableArray_ = publicAllOriginalMutableArray_ ;

    allArrangeMutableArray_ = publicAllArrangeMutableArray_ ;

    

    unchangingAllOriginalMutableDictionary_ = [ [ NSMutableDictionary alloc ] initWithObjects: allOriginalMutableArray_ forKeys: [ [ NSArray arrayWithObject: dateMutableArray_ ] objectAtIndex: 0 ] ];

    unchangingAllArrangeMutableDictionary_  = [ [ NSMutableDictionary alloc ] initWithObjects: allArrangeMutableArray_ forKeys: [ [ NSArray arrayWithObject: dateMutableArray_ ] objectAtIndex: 0 ] ];

    

    originalMutableDictionary_ = [ [ NSMutableDictionary alloc ] initWithDictionary: unchangingAllOriginalMutableDictionary_ ];

    arrangeMutableDictionary_ = [ [ NSMutableDictionary alloc ] initWithDictionary: unchangingAllArrangeMutableDictionary_ ];

    

    [ self.tableView reloadData ];

        

    NSLog( @"unauditedArrangeMutableDictionary_ %@" , unauditedArrangeMutableDictionary_ );

    

    //-------------------------------------------------------------------------------//

    

    

    

    //******************************************//

        

    //************增加本地查找功能****************//

    

    //======================================================================================//

    

    UISearchBar* searchBar = [ [ UISearchBar alloc ] init ];

    searchBar.frame =

    CGRectMake( 0, 0, self.tableView.bounds.size.width , 0 );

    searchBar.delegate = self;

    [ searchBar sizeToFit ];

    self.tableView.tableHeaderView = searchBar;

    

    searchBar.keyboardType = UIKeyboardTypeNumberPad;

    searchBar.showsCancelButton = YES;

    

    

    searchDisplayController_ = [ [ UISearchDisplayController alloc ] 

                      initWithSearchBar: searchBar 

                      contentsController: self ];

    searchDisplayController_.delegate = self;

    searchDisplayController_.searchResultsDataSource = self;

    searchDisplayController_.searchResultsDelegate = self;

    

    //--------------------------------------------------------------------------------

    searchBar.scopeButtonTitles = 

    [ NSArray arrayWithObjects:@"全部", @"未审核" , nil ];

    searchBar.showsScopeBar = YES;

    //--------------------------------------------------------------------------------

    

    

//    NSLog( @"2 unchangingAllArrangeMutableDictionary_ %@" , unchangingAllArrangeMutableDictionary_ );

//    NSLog( @"2 unauditedArrangeMutableDictionary_ %@" , unauditedArrangeMutableDictionary_ );

//        NSLog( @"2 dateMutableArray_ %@" , dateMutableArray_ );

//        NSLog( @"2 arrangeMutableDictionary_ %@" , arrangeMutableDictionary_ );

    

}

//将校区对应的数字改为具体校区

- (NSString*)getDistrictString:(NSString *)numberString

{

        if ( [ numberString isEqual: @"1" ] ) 

            return @"大学城";

        else if ( [ numberString isEqual: @"2" ] )

            return @"龙洞";

        else if ( [ numberString isEqual: @"3" ] ) 

            return @"东风路";

        else if ( [ numberString isEqual: @"4" ] )

            return @"商学院";

        else

            return NULL ;

}

#pragma mark -

#pragma mark Content Filtering

//搜索时调用的方法

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope

{

    

//    self.tableView = self.searchDisplayController.searchResultsTableView;

    

    NSLog( @"scope is %@" , scope );

//    NSLog( @"%@" , allArrangeMutableArray_ );

//    NSLog( @"%@" , allOriginalMutableArray_ );

//    NSLog( @"%@" , [ [ searchResultArray objectAtIndex: 0 ] objectAtIndex: 7 ] );

    

    //隐藏工具条

    [ self.navigationController setToolbarHidden: YES animated: YES ];

    

    //新建被查询的数组存储要查询的是 全部 还是 未审核的

    NSMutableArray* searchedMutableArray_ = [ [ [ NSMutableArray alloc ] init ] autorelease ];

    

    

    //******************** 未开始搜索前先整理tableview ********************************************//

    

    [ dateMutableArray_ removeAllObjects ];

    [ allArrangeMutableArray_ removeAllObjects ];

    [ allOriginalMutableArray_ removeAllObjects ];

    [ originalMutableDictionary_ removeAllObjects ];

    [ arrangeMutableDictionary_ removeAllObjects ];

    

    if ( [ scope isEqual: @"全部" ] ) 

    {

        [ searchedMutableArray_ removeAllObjects ];

        

        searchedMutableArray_ = (NSMutableArray*) searchResultArray;

    }

    else

    {

        [ searchedMutableArray_ removeAllObjects ];

        searchedMutableArray_ = (NSMutableArray*) unauditedResultMutableArray_;

    }

    

    //*******************************************************************************************************//

    

    NSLog( @"beingSearchedArray_ %@" , searchedMutableArray_ );

    //新建数组存储被查询后的结果

    NSMutableArray* beingSearchedResultMutableArray_ = [ [ [ NSMutableArray alloc ] init ] autorelease ]; 

    

    //判断是否存在有searchtext

    BOOL foundOutBool_ = NO;

    

//    NSLog( @"%@" , searchText );

    for ( NSArray* array in searchedMutableArray_ )

    {

        for ( NSString* item in array )

        {

//            NSLog( @"%@" , item );

            if ( [ item isEqualToString: [ array objectAtIndex: 4 ] ] || [ item isEqualToString: [ array objectAtIndex: 6 ] ] ) 

            {

                if ( NSNotFound != [ item rangeOfString: searchText ].location )

                {

                    NSLog( @"item %@" , item );

                    foundOutBool_ = YES;

                }

                else

                {

                    foundOutBool_ = NO;

                }

            }

        }

        if ( foundOutBool_ )

        {

            [ beingSearchedResultMutableArray_ addObject: array ];

        }

    }

    

    [ resultArrangeMutableArray_ removeAllObjects ]; // First clear the filtered array.

    [ resultOriginalMutableArray_ removeAllObjects ];

    [ resultDatesMutableArray_ removeAllObjects ];

    [ resultArrangeMutableDictionary_ removeAllObjects ];

    [ resultOriginalMutableDictionary_ removeAllObjects ];

    

    [ self soutOutArray: beingSearchedResultMutableArray_ ];

    

    NSLog( @"cha %@" , datesMutableArray_ );

    NSLog( @"cha %@" , publicAllArrangeMutableArray_ );

    NSLog( @"cha %@" , publicAllOriginalMutableArray_ );

    resultDatesMutableArray_ = datesMutableArray_;

    resultOriginalMutableArray_ = publicAllOriginalMutableArray_;

    resultArrangeMutableArray_ = publicAllArrangeMutableArray_;

    

    resultArrangeMutableDictionary_ = [ [ NSMutableDictionary alloc ] initWithObjects: resultArrangeMutableArray_ forKeys: resultDatesMutableArray_ ];

    resultOriginalMutableDictionary_ = [ [ NSMutableDictionary alloc ] initWithObjects: resultOriginalMutableArray_ forKeys: resultDatesMutableArray_ ];

    NSLog( @"cha %@" , resultArrangeMutableDictionary_ );

    NSLog( @"cha %@" , resultOriginalMutableDictionary_ );

}

#pragma mark -

#pragma mark UISearchDisplayController Delegate Methods

//下面是有输入字符的时候调用的函数

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller 

shouldReloadTableForSearchString:(NSString *)searchString

{

    NSLog( @"S" );

    

    if ( [ searchString length ]) 

    {

        [ self filterContentForSearchText: searchString 

                                    scope: [ [ self.searchDisplayController.searchBar scopeButtonTitles ] objectAtIndex: [ self.searchDisplayController.searchBar selectedScopeButtonIndex ] ] ];

    }

    return  YES;

}

//下面是选择“全部” 或“未审核”的时候调用的函数

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller

shouldReloadTableForSearchScope:(NSInteger)searchOption

{

    NSLog( @"O" ); 

    NSString* searchString = [ self.searchDisplayController.searchBar text ];

    if ( [ searchString length ])

    {

        [ self filterContentForSearchText: searchString scope: [ [ self.searchDisplayController.searchBar scopeButtonTitles ] objectAtIndex: searchOption ] ];

    }

    return  YES;

}

//下面是点击取消 或 没有搜索的时候调用的函数

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller

{

    NSLog( @"cancel" );

    NSLog( @"cancel %@" , unchangingAllOriginalMutableDictionary_ );

    NSLog( @"cancel %@" , unauditedOriginalMutableDictionary_ );

    //显示工具条

    [ self.navigationController setToolbarHidden: NO animated: YES ];

    

    // First clear the filtered array.

    [ dateMutableArray_ removeAllObjects ];

    [ originalMutableDictionary_ removeAllObjects ];

    [ arrangeMutableDictionary_ removeAllObjects ];

    

    if ( [ [ [ self.searchDisplayController.searchBar scopeButtonTitles ] objectAtIndex: [ self.searchDisplayController.searchBar selectedScopeButtonIndex ] ] isEqual: @"全部" ])

    {

        for ( id key in unchangingAllOriginalMutableDictionary_ )

        {

            [ dateMutableArray_ addObject: key ];

        }

        

        originalMutableDictionary_ = [ [ NSMutableDictionary alloc ] initWithDictionary: unchangingAllOriginalMutableDictionary_ ];

        arrangeMutableDictionary_ = [ [ NSMutableDictionary alloc ] initWithDictionary: unchangingAllArrangeMutableDictionary_ ];

    }

    else if ( [ [ [ self.searchDisplayController.searchBar scopeButtonTitles ] objectAtIndex: [ self.searchDisplayController.searchBar selectedScopeButtonIndex ] ] isEqual: @"未审核" ] )

    {

        for ( id key in unauditedOriginalMutableDictionary_ )

        {

            [ dateMutableArray_ addObject: key ];

        }

        

        originalMutableDictionary_ = [ [ NSMutableDictionary alloc ] initWithDictionary: unauditedOriginalMutableDictionary_ ];

        arrangeMutableDictionary_ = [ [ NSMutableDictionary alloc ] initWithDictionary: unauditedArrangeMutableDictionary_ ];

    }

    [ self.tableView reloadData ];

}

@end

原创粉丝点击