案例如下:我想从单独的类创建UITableView。
目前我有以下内容:
// Menu.h
@interface Menu : UITableViewController <UITableViewDelegate, UIAlertViewDelegate> {
UITableView *tableView;
}
@property (nonatomic,retain) NSMutableArray *navigationItems;
- (void)initMenu:(UIView *)view;
@end;
然后
// Menu.m
#import <Foundation/Foundation.h>
#import "Menu.h"
@implementation Menu
- (void) initMenu:(UIView *)view {
self.navigationItems = [[NSMutableArray alloc] initWithObjects:@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine",@"Ten",nil];
UIView *mainmenu=[[UIView alloc]initWithFrame:CGRectMake(0, 50, 320, 420)];
[mainmenu setBackgroundColor:[UIColor yellowColor]];
[view addSubview:mainmenu];
UITableView *menutableView = [[UITableView alloc] initWithFrame:view.bounds style:UITableViewStylePlain];
menutableView.backgroundColor = [UIColor whiteColor];
menutableView.delegate = self;
menutableView.dataSource = self;
[mainmenu addSubview:menutableView];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableViewi cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableViewi dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = [self.navigationItems objectAtIndex:indexPath.row];
return cell;
}
@end
在不同的.m文件中我调用方法:
...
#import "Menu.h"
...
- (void)viewDidLoad
{
[super viewDidLoad];
...
Menu *menu = [[Menu alloc] init];
[menu initMenu: self.view];
}
运行此操作会使应用程序崩溃,Xcode不会提供任何详细报告。但是,如果我将Menu.m结合到我正在调用“initMenu”的.m文件中,它就不会崩溃。
此外,如果我发表评论menutableView.dataSource = self;
,它将与我们的崩溃一起运行(当然,表中没有行......)。
答案 0 :(得分:0)
将视图传递到init方法,然后在所述init方法中创建/添加子视图是一种奇怪的设计模式。将Menu类更改为viewcontroller,然后将UIView和UITableView声明移动到viewDidLoad方法。崩溃很可能发生,因为tableview试图在父视图加载完成之前显示数据。