0

検索バーはコンソールでは機能しますが、シミュレーターでは機能せず、理由がわかりません。多くのコードを試しましたが、何も機能しません。テーブルビューでレストラン名を探していますが、何も入力しないと、シミュレーターですべてが同じままになります。

これは私のコードです:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    if([searchText length] == 0){
        [jsonObject2 removeAllObjects];
        [jsonObject2 addObjectsFromArray:jsonObject];
    }else{
        [jsonObject2 removeAllObjects];

        for(NSDictionary *dictionary in jsonObject)
        {
            NSObject *ob = [dictionary objectForKey:@"nombres"];
            if([ob isKindOfClass: [NSString class]])
            {
                NSString*string=[ob description];
                NSRange range = [string rangeOfString:searchText options:NSCaseInsensitiveSearch];

                if (range.location != NSNotFound) {
                    [jsonObject2 addObject:ob];
                    NSLog(@"%@",jsonObject2);
                }
            }
        }
    }
    [myTableView reloadData];
}

-(void)searchBarSearchButtonClicked:(UISearchBar *)asearchBar{
    [searchBar resignFirstResponder];
}
4

3 に答える 3

0

この問題には2つの理由が考えられます

  1. jsonObjectテーブルビューのデータソースとして使用しています。その場合はを使用してjsonObject2ください。

  2. 最初のケースが間違っている場合はjsonObject2、すべての検索コンポーネントがその中に追加された後にログに記録する必要があるかもしれません。そして、オブジェクトが文字列化されない場合に備えて修正します。

于 2013-02-04T05:31:43.530 に答える
0

最初に確認UITableViewし、UISearchBar適切に追加されているかどうか??? ...次に、Take TwoNSMutableArrayを使用して、次のような方法で1つの配列を別の配列に追加します。ViewDidLoad

self.listOfTemArray = [[NSMutableArray alloc] init]; // array no - 1
self.ItemOfMainArray = [[NSMutableArray alloc] initWithObjects:@"YorArrayList", nil]; // array no - 2 

[self.listOfTemArray addObjectsFromArray:self.ItemOfMainArray]; // add 2array to 1 array

そして、次のコードの方法を書いてください

- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText
{
        NSString *name = @"";
        NSString *firstLetter = @"";

    if (self.listOfTemArray.count > 0)
         [self.listOfTemArray removeAllObjects];

        if ([searchText length] > 0)
        {
                for (int i = 0; i < [self.ItemOfMainArray count] ; i = i+1)
                {
                        name = [self.ItemOfMainArray objectAtIndex:i];

                        if (name.length >= searchText.length)
                        {
                                firstLetter = [name substringWithRange:NSMakeRange(0, [searchText length])];
                                //NSLog(@"%@",firstLetter);

                                if( [firstLetter caseInsensitiveCompare:searchText] == NSOrderedSame )
                                {
                                    // strings are equal except for possibly case
                                    [self.listOfTemArray addObject: [self.ItemOfMainArray objectAtIndex:i]];
                                    NSLog(@"=========> %@",self.listOfTemArray);
                                }
                         }
                 }
         }
         else
         {
             [self.listOfTemArray addObjectsFromArray:self.ItemOfMainArray ];
         }

        [self.tblView reloadData];
}

そして書いてくださいcellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Foobar"];
    if (cell == nil) 
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Foobar"];

        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
        cell.textLabel.textColor = [UIColor blackColor];
    }

        cell.textLabel.text = [self.listOfTemArray objectAtIndex: indexPath.row];

    return cell;
}

このコードはあなたに役立つかもしれません...ありがとう:)

于 2013-02-04T06:18:19.240 に答える
0

私は自分の問題を見つけ、textDidChangeメソッドを検索するためにこのコードを追加します:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
if([searchText length] == 0){
    [jsonObject2 removeAllObjects];
    [jsonObject2 addObjectsFromArray:jsonObject];
    //NSLog(@"%@",jsonObject2);
}else{
    [jsonObject2 removeAllObjects];
    for(NSDictionary *dictionary in jsonObject)
    {
        NSString*string=[dictionary objectForKey:@"nombres"];
            NSRange range=[string rangeOfString:searchText options:NSCaseInsensitiveSearch];
            if (range.location != NSNotFound) {
                [jsonObject2 addObject:dictionary];
                NSLog(@"%@",jsonObject2);
        }
    }
}
[myTableView reloadData];  
}
于 2013-02-04T17:00:52.733 に答える