UITableViewController没有使用NSMutableArray填充tableview

时间:2012-02-04 00:37:13

标签: iphone objective-c ios uitableview

我目前正在使用标签栏应用程序,并且遇到了一些障碍。当我尝试使用NSMutable数组中的记录加载TableViewController时,表视图中没有填充数据。

RootViewController方法 - 这是TableViewController

- (id)init
{
//Call the superclass's designated initalizer
self = [super initWithNibName:nil bundle:nil];

if (self){

    //Populate NSMutalableArry with all pub objects 

    for(int i=0; i<10; i++){
        [[PubStore defaultStore] createPub];
        //j = [[[[PubStore defaultStore] allPubs] objectAtIndex:i] getPubName];

    }

    //Get the tab bar item
    UITabBarItem *tbi = [self tabBarItem];

    //Give it a label
    [tbi setTitle:@"Pubs"];

    //Create a UIImage from a file
    UIImage *i = [UIImage imageNamed:@"88-beermug.png"];

    //Put Image on the tab bar item
    [tbi setImage:i];




}

return self;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {


return [[[PubStore defaultStore] allPubs] count];

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath   *)indexPath {
// Create an instnce of UITableViewCell, with default appearance
UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"] autorelease];

//Set the text on the cell with the description of the possession
//that is at the nth index of the possessions, where n =row this cell
//will appear in on the tableview

Pub *p = [[[PubStore defaultStore] allPubs] objectAtIndex:[indexPath row]];
NSLog(@"Display Pub Name: %@", [p getPubName]);    
[[cell textLabel] setText: [p getPubName]];


return cell;
}

PubStore方法

- (id)init
{

if (defaultStore) {
    //Return the old Default Store
    return defaultStore;

}

self = [super init];
if(self){
    allPubs = [[NSMutableArray alloc] init];
}
return self;
}

- (NSArray *)allPubs
{
return allPubs;
}


- (Pub *)createPub
{
//* random possessions does not exist in my Pub Class
Pub *p = [Pub randomPub];
NSLog(@"New Pub: %@", p); 
[allPubs addObject:p];


return p;
}

您可以提供给我的任何帮助将不胜感激,我正在学习目标c,这是我需要通过的一个障碍。

4 个答案:

答案 0 :(得分:1)

在RootViewController.init()方法中,你需要这样的东西:

self.table.dataSource = self;
self.table.delegate = self;

假设table是您UITableView的名称。

答案 1 :(得分:1)

我找到了问题的根源。我在numberOfSectionsInTableView:方法中返回0而不是1。我错误地修改了这个方法,并且这样做告诉程序没有要填充的行部分。

方法错误

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

正确方法

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

答案 2 :(得分:0)

问题出在您的模型中,您需要在某处设置defaultStore ivar。此外,您不应该从init调用initWithNibName。你不应该混合初始化者

答案 3 :(得分:0)

你的tableviewcell需要一个框架。

在cellForRowAtIndexPath中:

 UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"] autorelease];
 cell.frame = CGRectMake(0,0,320,80); // or whatever frame you want