0

アプリを実行すると、次のエラーが発生します。

キャッチされなかった例外「NSInternalInconsistencyException」が原因でアプリを終了しています。理由:「-[UITableViewController loadView]は「2-view-3」ペン先をロードしましたが、UITableViewを取得しませんでした。」

以下は私が使用しているコードです、

ViewController.h

@interface ViewController : UITableViewController <UISearchDisplayDelegate,UITableViewDataSource,UITableViewDelegate>

@property (nonatomic,strong) NSArray *arForTable;
@property (nonatomic,strong) NSArray *arForSearch;

ViewController.m

@implementation ViewController

@synthesize arForTable = _arForTable;
@synthesize arForSearch = _arForSearch;

-(void)awakeFromNib
{
    [super awakeFromNib];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.arForTable = [NSArray arrayWithObjects:
                       [NSDictionary dictionaryWithObjectsAndKeys:@"Pending",@"name",@"2",@"value",nil],
                       [NSDictionary dictionaryWithObjectsAndKeys:@"Pent",@"name",@"22",@"value",nil],
                       [NSDictionary dictionaryWithObjectsAndKeys:@"Pen",@"name",@"5",@"value",nil],
                       [NSDictionary dictionaryWithObjectsAndKeys:@"Neon",@"name",@"7",@"value",nil],
                       [NSDictionary dictionaryWithObjectsAndKeys:@"Spark",@"name",@"99",@"value",nil],
                       nil];
    self.arForSearch = nil;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return (tableView == self.tableView)?self.arForTable.count:self.arForSearch.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    }

    NSDictionary *dToAccess = (self.tableView==tableView)?[self.arForTable objectAtIndex:indexPath.row] : [self.arForSearch objectAtIndex:indexPath.row];
    [(UILabel*)[cell viewWithTag:1] setText:[dToAccess valueForKey:@"name"]];
    [(UILabel*)[cell viewWithTag:2] setText:[dToAccess valueForKey:@"value"]];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

- (void)filterContentForSearchText:(NSString*)str{
    // for inCaseSensitive search
    str = [str uppercaseString];

    NSMutableArray *ar=[NSMutableArray array];
    for (NSDictionary *d in self.arForTable) {
        NSString *strOriginal = [d valueForKey:@"name"];
        // for inCaseSensitive search
        strOriginal = [strOriginal uppercaseString];

        if([strOriginal hasPrefix:str]) {
            [ar addObject:d];
        }
    }
    self.arForSearch=[NSArray arrayWithArray:ar];
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    [self filterContentForSearchText:searchString];

    // Return YES to cause the search result table view to be reloaded.
    return YES;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

前もって感謝します

4

2 に答える 2

1

UITableViewまたはUISearchBarのアウトレットが見つかりません。さらに、UITableViewControllerを継承し、不要なデリゲートとデータソースを実装しました。また、UISearchBarを使用するには、テーブルビューとuisearchbarは、テーブルビューに検索バーを追加することはお勧めできません。絶対に追加しないでください。したがって、検索バーのデリゲートがある場合は、テーブルビューに検索バーを実装しようとしていることを示します。

uitableviewcontrollerに検索バーを追加する必要がある場合は、navigationcontrollerの上にボタンを配置できます。このチュートリアルを実行して、これを確認してください。

UISearchBarチュートリアル

于 2012-05-11T10:21:39.790 に答える
0

クラスはUITableViewControllerタイプであるため、UITableViewDataSourceおよびUITableViewDelegateインターフェイスを実装する必要はありません。また、Interface BuilderにUITableViewオブジェクトが必要であり、クラスのビューアウトレットとしてリンクされている必要があります。次に、画面のみが読み込まれ、実行されます

これが問題の解消に役立つことを願っています。

于 2012-05-11T10:11:24.933 に答える