2013-09-29 78 views
0

我是iOS開發人員的初學者,無法找到導致此問題的原因。iOS應用程序在UITableView搜索後死機

我有一個簡單的應用程序與主控和DetailView控制器。 Master View包含一個帶有SearchController的UITableView。選擇UITableView上的任何行將轉換到detailview。

的應用程序凍結,當我執行下列順序

  1. 啓動應用
  2. 拉下搜索欄
  3. 輸入文本
  4. 選擇一行從搜索結果中
  5. 從選擇回詳細視圖

現在應用程序在加載MasterView的ViewDidLoad方法後凍結。我在system.log中找不到任何東西。

下面的代碼從MasterViewController

- (void)viewWillAppear:(BOOL)animated { 
    self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)]; 
    [self.tableView setContentOffset:CGPointMake(0,40)]; 
    self.tableView.tableHeaderView = self.searchBar; 

    // Create and configure the search controller 
    self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; 
    self.searchController.searchResultsDataSource = self; 
    self.searchController.searchResultsDelegate = self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSString *months = @"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"; 
    feeds = [months componentsSeparatedByString:@","]; 
    self.navigationItem.leftBarButtonItem = self.editButtonItem; 

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)]; 
    self.navigationItem.rightBarButtonItem = addButton; 
    self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSLog(@"numberOfRowsInSection"); 

    if(tableView == self.tableView) 
    { 
     return feeds.count; 
    } 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like %@", self.searchBar.text]; 
    self.filteredFeeds = [feeds filteredArrayUsingPredicate:predicate]; 
    return feeds.count; 
} 

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

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


    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     NSDate *object = _objects[indexPath.row]; 
     self.detailViewController.detailItem = object; 
    } 

    [self performSegueWithIdentifier: @"showDetail" sender: self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showDetail"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     NSDate *object = _objects[indexPath.row]; 
     [[segue destinationViewController] setDetailItem:object]; 
    } 
} 

我已經上傳了整個項目在下面的位置。

https://www.dropbox.com/s/yok9vngzv143npa/search.zip

任何形式的援助表示讚賞。

回答

0

我無法運行你的程序,因爲iOS的版本問題。 但我看到你的代碼。我在1點懷疑在下面的代碼,

- (void)viewWillAppear:(BOOL)animated { 
    self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)]; 
    [self.tableView setContentOffset:CGPointMake(0,40)]; 
    self.tableView.tableHeaderView = self.searchBar; 

    // Create and configure the search controller 
    self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; 
    self.searchController.searchResultsDataSource = self; 
    self.searchController.searchResultsDelegate = self; 
} 

創建/連連分配的UISearchBar和UISearchDisplayController,而你從DetailViewController回到MasterViewController,這些可能是你的應用程序凍結的原因。 在將接收者的視圖添加到視圖層次結構之前以及在配置任何動畫以顯示視圖之前調用「viewWillAppear」。 在視圖控制器之後調用的「viewDidLoad」已將其視圖層次結構加載到內存中。

我建議你在viewDidLoad方法中放置一次性分配視圖代碼。

欲瞭解更多信息,請通過此文檔https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/viewDidLoad

+0

工作!感謝你的回答。 –

相關問題