0

UISearchControl (以前のものとは少し異なる iOS8 バージョン) を実装しました。以下に示す NSLog ステートメントに従って入力すると、正しく起動しているようです。唯一の問題は、UITableView が実際に更新されないことです。NSLog を } else { numberOfRowsInSection の部分に追加して、呼び出されていないことを確認しました。そのようです:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView == self.tableView) {

        return self.objects.count;

    } else {
        // NOT BEING FIRED WHEN STUFF IS TYPED IN SEARCH BAR?
        NSLog(@"Search Results  Returned in TableView");
        return self.searchResults.count;

    }
}

これらのメソッドは正常に起動していますが、updateFilter メソッドに追加された NSLog に従って、searchResults 配列を正しく更新しています。

#pragma mark - UISearchResultsUpdating
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController {
    NSString *searchString = [self.searchController.searchBar text];
    [self updateFilteredContentForSaleName:searchString];

    // ASSUMING THIS IS WHAT CAUSES TABLEVIEW TO REFRESH, BUT ISNT REFRESHING IT WITH NEW ARRAY?

     [((UITableViewController *)self.searchController.searchResultsController).tableView reloadData];
}
#pragma mark - Content Filtering
- (void)updateFilteredContentForSaleName:(NSString *)saleName {
    [self.searchResults removeAllObjects];

    for (PFObject *sale in self.objects)
    {
        NSString *saleTitle = [sale objectForKey:@"name"];
        if ([[saleTitle lowercaseString] hasPrefix:[saleName lowercaseString]])
        {
            [self.searchResults addObject:sale];
        }
    }
    // THIS LOG SHOWS SEARCH RESULTS CORRECTLY HOW THEY SHOULD BE, JUST NO UPDATE TO UITABLEVIEW

    NSLog(@"%@", self.searchResults);
}

しかし、単にテーブルビューへの更新はありません...

これはなぜですか?ここで更新を間違って呼んでいますか?:

 [((UITableViewController *)self.searchController.searchResultsController).tableView reloadData];

私は PFQueryTableViewController * も試しましたが、それは本質的に実際のビューコントローラーに使用しているものですが、うまくいきません。

編集

UISearchControl の作成に使用されるコードは次のとおりです。

@interface LocalSalesViewController () <UISearchResultsUpdating>


@property (nonatomic, strong) UISearchController *searchController;
@property (nonatomic, strong) NSMutableArray *searchResults; // Filtered search results

@end

@implementation LocalSalesViewController
- (id)initWithCoder:(NSCoder *)aCoder {
    self = [super initWithCoder:aCoder];
    if (self) {
        self.parseClassName = @"Sales";
        self.pullToRefreshEnabled = YES;
        self.paginationEnabled = YES;
        self.objectsPerPage = 25;
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.searchResults = [NSMutableArray array];
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
    self.tableView.tableHeaderView = self.searchController.searchBar;
    self.definesPresentationContext = YES;

}
4

0 に答える 0