加载了笔尖但没有得到 UITableView

Posted

技术标签:

【中文标题】加载了笔尖但没有得到 UITableView【英文标题】:Loaded the nib but didn't get a UITableView 【发布时间】:2013-11-27 05:50:34 【问题描述】:

我一直在 YouTube 上关注本教程(part 1 和 part 2)。

我已经完成了两个视频,并使用以下代码将视图控制器与父视图控制器连接起来:

- (IBAction)searchButtonClicked:(id)sender 
    NSLog(@"It works.");

    SearchViewController *searchViewControl = [self.storyboard instantiateViewControllerWithIdentifier:@"SearchControllerNav"];

    [self presentViewController:searchViewControl animated:YES completion:nil];


这段代码确实有效,因为这与我用于其他模态视图控制器的格式相同,所以我知道这不是问题。

无论如何,当我点击视图控制器中的搜索按钮时,它应该会弹出SearchViewController。但是,应用程序崩溃了,它给了我这个错误消息:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UITableViewController loadView] loaded the "jp7-vt-IdA-view-Jer-xW-qlD" nib but didn't get a UITableView.'

我正在为这个应用程序使用故事板。

我有什么遗漏的吗?提前谢谢你。

一个附带问题:我也收到一个警告,每当显示isFiltered == YES 时都会说Comparison between pointer and integer ('BOOL *' (aka 'signed char *') and 'int')。有办法解决吗?

这是SearchViewController的代码:

SearchController.h

#import <UIKit/UIKit.h>

@interface SearchViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate> 


- (IBAction)cancelButtonTapped:(id)sender;

@property (weak, nonatomic) IBOutlet UISearchBar *mySearchBar;
@property (weak, nonatomic) IBOutlet UITableView *myTableView;

@property (nonatomic, strong) NSMutableArray *itemsInCloudApp;
@property (nonatomic, strong) NSMutableArray *filteredList;
@property BOOL *isFiltered;


@end

SearchViewController.m

#import "SearchViewController.h"

@interface SearchViewController ()

@end

@implementation SearchViewController

@synthesize mySearchBar, myTableView, itemsInCloudApp, filteredList, isFiltered;

- (void)viewDidLoad

    [super viewDidLoad];

    // Set title.
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    titleLabel.text = @"Search";
    titleLabel.adjustsFontSizeToFitWidth = YES;
    titleLabel.clipsToBounds = YES;
    titleLabel.numberOfLines = 1;
    titleLabel.font = [UIFont fontWithName:@"Avenir-Medium" size:18];
    titleLabel.textColor = [UIColor blackColor];
    titleLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    titleLabel.textAlignment = NSTextAlignmentCenter;
    [titleLabel sizeToFit];

    self.navigationItem.titleView = titleLabel;

    // Alloc and init list.
    itemsInCloudApp = [[NSMutableArray alloc]initWithObjects:@"http://www.apple.com/", @"http://www.trijstudios.com/", @"http://www.google.com/", @"http://www.squarespace.com/", @"http://www.youtube.com/", nil];


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    // Return the number of sections.
    return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    // Return the number of rows in the section.
    if (isFiltered == YES) 
        return [filteredList count];
     else 
    return [itemsInCloudApp count];
    


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

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...

    if (isFiltered == YES) 
        cell.textLabel.text = [filteredList objectAtIndex:indexPath.row];
        cell.detailTextLabel.text = [filteredList objectAtIndex:indexPath.row];;
     else 
        cell.textLabel.text = [itemsInCloudApp objectAtIndex:indexPath.row];
        cell.detailTextLabel.text = [itemsInCloudApp objectAtIndex:indexPath.row];
    

    return cell;


-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
    if (searchText.length == 0) 
        // Set bollean flag
        isFiltered = NO;
     else 
        // Set boolean flag
        isFiltered = YES;

        // Alloc and init our fliteredData
        filteredList = [[NSMutableArray alloc] init];

        // Fast enumeration
        for (NSString *name in itemsInCloudApp) 
            NSRange nameRange = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];

            if (nameRange.location != NSNotFound) 
                [filteredList addObject:name];
            
        
    
    // Reload tableView
    [myTableView reloadData];



-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar 
    [mySearchBar resignFirstResponder];


- (IBAction)cancelButtonTapped:(id)sender 

    [self dismissViewControllerAnimated:YES completion:nil];


@end

注意:我做了一些修改以满足我的需要。

【问题讨论】:

检查这个.. ***.com/questions/11221802/… @Dinesh 这实际上是我在问这个问题之前去的第一个,但它没有帮助。 我在这里发布了一个答案***.com/questions/11221802/… 我希望它对您有所帮助,如果可以,请投票。谢谢! 【参考方案1】:

您是否尝试过将您的@interface SearchViewController : UITableViewController 更改为@interface SearchViewController : UIViewController

我强烈怀疑您没有将 UITableview 附加为 XIB 中的视图,或者您的类应该派生 UIViewController 而不是 UITableviewController 类..

【讨论】:

奇怪的是,你的建议奏效了。我不太清楚为什么它不需要UITableViewController,即使它显然有一个UITableView,但它确实有效。感谢您的帮助。【参考方案2】:

我遇到了类似的错误。我能够使用@Dinesh 的建议解决它,但我不喜欢这样,因为我担心可能会产生一些意想不到的后果。

我发现当我查看情节提要中的场景层次结构时,我注意到我有这个结构(抱歉,我不知道如何格式化 - 它应该是一个树形结构):

View Controller
  View
     Table View

当我取出位于中间的视图时,我的问题就消失了。但是,在这样做之前,您需要删除视图与视图控制器或表视图之间可能存在的任何出口。确保这些都消失后,请执行以下最后步骤:

    拖动表视图,使其成为视图控制器的直接后代。 删除视图 Command-Drag 从 View Controller 到 Table View,从而直接在两者之间创建一个新的出口。

另外,将 .h 文件保留为 UITableView 的子类(不是 UIView)。

无论如何,这为我解决了问题。如果有人遇到这个,我希望它有所帮助。

【讨论】:

奇怪的是,它也解决了我的问题。似乎是内部框架之间的可怕误解!感谢您的提示,它非常有见地。【参考方案3】:

对于您重新评估警告的问题,警告的出现是因为您已将 BOOL isFiltered 作为指针。

【讨论】:

【参考方案4】:

对于您的第一个问题,您需要查看故事板。我确信您的文件所有者的 视图 已连接到 UIView。要解决这个问题,您必须拖动 UITableView 并且视图必须连接到 UITableView

对于第二个问题,将 BOOL 声明为

@property(assign,nonatomic) BOOL isFiltered;

【讨论】:

我其实没有xib文件。我应该提到我正在使用故事板。 @Junior117 用于情节提要,使用相同的方法。检查您的视图控制器的连接面板【参考方案5】:

我在构建 iOS7 通用应用程序时遇到了一个简单而愚蠢的错误:我只构建了 iPhone 应用程序的一部分,但将方案设置为 iPad 模拟器。在收到错误并查看此处后,我看到了我的错误,将方案切换到 iPhone,并且应用程序使用正确的故事板运行了正确的模拟器。希望对您有所帮助。

【讨论】:

以上是关于加载了笔尖但没有得到 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

加载了笔尖但没有得到 UITableView

笔尖但没有得到 UITableView

笔尖没有覆盖在相机视图上

lldb 断点,加载了 nib 但没有得到 UITableView

加载笔尖但未设置视图出口,找不到视图出口。

加载笔尖但未设置视图出口