UITableView没有填充

时间:2010-04-17 06:49:28

标签: iphone uitableview

我有一个特殊的问题。我创建了一个名为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

3 个答案:

答案 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中

...检查它是否打印有效值....似乎数组的对象在它之前释放...