UINavigationController中的UITableView导致EXC_BAD_ACCESS

时间:2010-08-28 01:45:44

标签: iphone objective-c

测试代码下面的

会在多次滚动时导致EXC_BAD_ACCESS。 有人想告诉我这个问题吗?

-myview.h ------------------------------------------- --------

@interface MyView : UINavigationController < UITableViewDataSource, UITableViewDelegate, UINavigationBarDelegate >
{
   UITableView* mTableView;
   NSMutableArray* data;
}

-myview.m ------------------------------------------- --------

@implementation MyView

- (void)viewDidLoad
{
    [super viewDidLoad];
    int th = self.navigationBar.frame.size.height;
    int w = self.view.frame.size.width;
    int h = self.view.frame.size.height;

    mTableView = [[[UITableView alloc] initWithFrame:
                CGRectMake(0.0f, th, w, h - th) style:UITableViewStylePlain] retain];
    mTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth |
                                      UIViewAutoresizingFlexibleHeight;
    mTableView.dataSource = self;
    mTableView.delegate = self;
    [mTableView setRowHeight:55];

    [self.view addSubview:mTableView];

    data = [[[NSMutableArray alloc] init] retain];

    for (int i = 0; i < 150; i++)
    {

        [data addObject:[NSDictionary
        dictionaryWithObjects:[NSArray arrayWithObjects:@"good", [UIColor blackColor], nil]

        forKeys:[NSArray  arrayWithObjects:@"name", @"color", nil]]];
    }
}

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


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 150;
}

- (UITableViewCell *)tableViewCellWithReuseIdentifier:(NSString *)identifier
{
    UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
    cell.textLabel.text = @"goooood";
    return cell;
}

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

  if (cell == nil)
        cell = [self tableViewCellWithReuseIdentifier:CellIdentifier];

  return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}


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

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

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

@end

1 个答案:

答案 0 :(得分:0)

您应该有一个包含表视图的视图控制器(它甚至可以是UITableViewController的子类)。我不相信UINavigationController不能像你一样被分类。如果你想要一个导航控制器,你应该创建一个包含你的tableview的CustomTableViewController实例,然后使用initWithRootViewController:的{​​{1}}方法:

UINavigationController