2013-04-04 99 views
2

在我的應用程序,我在uitableview顯示從SQLite數據庫的數據成功,並插入UISearchbardisplay controller顯示在另一個表搜索結果,問題是,當我輸入要搜索的字符串,它總是返回:即使該表中存在該字符串,也不會有結果!UISearch欄始終顯示:沒有結果

我想我在方法 (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText有問題,但我不知道到底是什麼問題以及如何處理它!這裏是我的代碼:

MasterViewControllerViewController.m:

#import "MasterViewControllerViewController.h" 
#import"MasterViewControllerAppDelegate.h" 

#import"SingleStudent.h" 


- (void)viewDidLoad { 

MasterViewControllerAppDelegate* appDelegate =(MasterViewControllerAppDelegate*)[[UIApplication sharedApplication]delegate]; 
maListe = [[NSMutableArray alloc] init]; 
tampon = [[NSMutableArray alloc] init]; 
[maListe addObjectsFromArray:appDelegate.aryDatabase]; 
[tampon addObjectsFromArray:maListe]; 
[super viewDidLoad]; 
} 


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


{static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
MasterViewControllerAppDelegate* appDelegate =(MasterViewControllerAppDelegate*)[[UIApplication sharedApplication]delegate]; 
SingleStudent* sStudent =[appDelegate.aryDatabase objectAtIndex:indexPath.row]; 

cell.textLabel.text = [sStudent strName]; 
// Configure the cell. 

return cell; 
} 

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 

tampon2 = [[NSMutableArray alloc] init]; 


[tampon2 addObjectsFromArray:tampon]; 
[maListe removeAllObjects]; 
if([searchText isEqualToString:@""]) 
{ 
    [maListe removeAllObjects]; 
    [maListe addObjectsFromArray:tampon]; // Restitution des données originales 
    return; 
} 


for (NSDictionary *dict in tampon2){ 
     NSString *name = [NSString stringWithFormat:@"%@", dict]; 



     NSRange range = [name rangeOfString:searchText options:NSCaseInsensitiveSearch]; 
     if (range.location != NSNotFound) 
     { 
      if(range.location== 0) // premiere lettre 
       [maListe addObject:name];} 
     }} 

MasterViewControllerAppDelegate.m

#import "MasterViewControllerAppDelegate.h" 
#import "MasterViewControllerViewController.h" 
#import "SingleStudent.h" 

-(void)updateNames { 

databaseName = @"students7.sqlite"; 
NSArray* documentsPath= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString* documentsDir =[documentsPath objectAtIndex:0]; 
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];} 

-(void)checkAndCreateDatabase { 

BOOL success; 
NSFileManager* fileManager = [NSFileManager defaultManager]; 
success = [fileManager fileExistsAtPath:databasePath]; 
if (success) { 
    return; 
} 
NSString* databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; 
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil]; 

} 


-(void)readWordsFromDatabase{  



    db = [FMDatabase databaseWithPath:databasePath]; 
aryDatabase = [[NSMutableArray alloc] init]; 
[db setLogsErrors:TRUE]; 
[db setTraceExecution:TRUE]; 
if (![db open]) { 
    NSLog(@"failed to open database"); 
    return; 
} 
else { 
    NSLog(@"Opened database successfully"); 
} 
FMResultSet* rs = [db executeQuery:@"SELECT * FROM student"]; 
while ([rs next]) { 
    int aID = [rs intForColumn:@"id"]; 
    int aPK = [rs intForColumn:@"pk"]; 
    NSString* aName = [rs stringForColumn:@"name"]; 

    SingleStudent* sStudent = [[SingleStudent alloc] initWithData:aPK :aID :aName]; 
    [aryDatabase addObject:sStudent]; 
    [sStudent release]; 

} 
[db close]; 

} 

singleStudent.m

-(id)initWithData:(int)pK :(int)aId :(NSString*)name` 
{ 

self.intPK = pK; 
self.intId = aId; 
self.strName = name; 
return self;} 

我怎樣才能解決這個問題?

回答

0

我改變了我的代碼,這一點,如果有人需要它總有一天它工作正常這裏的變化:

- (void)viewDidLoad { 

maListe = [[NSMutableArray alloc] init]; 
tampon = [[NSMutableArray alloc] init]; 
int i; 
for (i=0 ; i <= 4; i++) { 

MasterViewControllerAppDelegate* appDelegate=(MasterViewControllerAppDelegate*)[[UIApplication sharedApplication]delegate]; 
SingleStudent* sStudent=[appDelegate.aryDatabase objectAtIndex:i]; 

[maListe addObject:[sStudent strName]]; 



    } 
[tampon addObjectsFromArray:maListe]; 


[super viewDidLoad]; 
    } 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 


static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
//MasterViewControllerAppDelegate* appDelegate =(MasterViewControllerAppDelegate*)[[UIApplication sharedApplication]delegate]; 
//SingleStudent* sStudent =[appDelegate.aryDatabase objectAtIndex:indexPath.row]; 
//NSString *cellValue = [sStudent strName]; 
NSString *cellValue = [maListe objectAtIndex:indexPath.row]; 
cell.textLabel.text = cellValue; 
// Configure the cell. 
/*NSString *cellValue = [maListe objectAtIndex:indexPath.row]; 
cell.textLabel.text = cellValue;*/ 


return cell;} 

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 

{ 

tampon2 = [[NSMutableArray alloc] init]; 
[tampon2 addObjectsFromArray:tampon]; 
[maListe removeAllObjects]; 
if([searchText isEqualToString:@""]) 
{ 
    [maListe removeAllObjects]; 
    [maListe addObjectsFromArray:tampon]; // Restitution des données originales 
    return; 
} 


for(NSString *name in tampon2) 
{ 


      NSRange r = [name rangeOfString:searchText]; 
    if(r.location != NSNotFound) 
    { 
     if(r.location== 0) // premiere lettre 
     [maListe addObject:name]; 
    } 
} 
}