我有一个特殊的问题。我创建了一个名为SampleTable的普通Objective c类。然后我扩展了UITableView而不是NSObject。然后在initWithFrame构造函数中初始化表。我还为数据源创建了一个NSMutableArray对象。我还符合UITableViewDelegate和UITableViewDatasource。我也覆盖了必要的方法。
现在我在另一个类中创建了这个类的对象,并将该对象添加为子视图。 tableView是根据我给initWithFrame构造函数的CGRectMake()坐标绘制的。但它没有填充数据。我不知道问题是什么。能有人帮助我。
SampleTable.h
#import <Foundation/Foundation.h>
@interface SampleTable : UITableView {
NSMutableArray *ItemArray;
}
@property (nonatomic,retain) NSMutableArray *ItemArray;
-(NSMutableArray *) displayItemArray;
@end
#import <Foundation/Foundation.h>
@interface SampleTable : UITableView {
NSMutableArray *ItemArray;
}
@property (nonatomic,retain) NSMutableArray *ItemArray;
-(NSMutableArray *) displayItemArray;
@end
SampleTable.m
答案 0 :(得分:3)
您从未在代码段中初始化ItemArray。删除displayItemData方法并将初始化程序更改为:
-(id)initWithFrame:(CGRect)frm
{
if ((self = [super initWithFrame:frm])) != nil)
{
self.delegate=self;
self.dataSource=self;
ItemArray=[[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",nil];
[self reloadData];
}
return self;
}
您也可以在初始化程序中调用displayItemArray方法。我认为这种方法毫无意义,因此我建议完全删除它。
如果不亲自尝试,我仍然相信您也可以在初始化程序中摆脱[self reloadData]。
答案 1 :(得分:1)
在-(id)initWithFrame:(CGRect)frm
方法中,您的代码会在-reloadData
上调用UITableView
。目前您的ItemArray
无法使用。
因此,当UITableView
调用它的委托-numberOfSectionsInTableView:
和-tableView:numberOfRowsInSection:
方法来获取有关视图中显示内容的信息时,它们会返回一个零行的部分。
什么都没显示!
改变ItemArray
:
-(NSMutableArray *) displayItemArray {
if(ItemArray==nil) {
ItemArray=[[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",nil];
[self reloadData];
}
return ItemArray;
}
答案 2 :(得分:0)
打印值
[self.ItemArray objectAtIndex:indexPath.row];
在NSLog中...检查它是否打印有效值....似乎数组的对象在它之前释放...