我目前正在使用标签栏应用程序,并且遇到了一些障碍。当我尝试使用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,这是我需要通过的一个障碍。
答案 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