我能够从plist获取数据,但似乎没有调用我的cellForRowAtIndexPath,因为没有NSLog从方法内部打印任何内容。

这是我的代码:-

- (void)viewDidLoad
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drinks" ofType:@"plist"];

    NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
    self.drinks = [tempDict objectForKey:@"Root"];
    NSLog(@"%@", self.drinks);
    NSLog(@"Number = %d", self.drinks.count);
    [super viewDidLoad];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
NSLog(@"I am inside cellForRowAtIndexPath");
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell.
NSArray *allValues = [self.drinks valueForKey:@"name"];
NSLog(@"%d", allValues.count);
cell.textLabel.text = [allValues objectAtIndex:indexPath.row];

return cell;


}

这是我的控制台输出:-

2011-10-01 20:27:01.940 DrinkMixer[1832:b303] (
        {
        directions = "Shake adahsdk adlkasd";
        ingredients = "kslkds lkjsjlkd kjsljlakj aajdlkj";
        name = "Fire Cracker";
    },
        {
        directions = "abds fedfsdkkjkljlkj;j ok";
        ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj";
        name = "Lemon Drop";
    },
        {
        directions = "abds fedfsdkkjkljlkj;j ok";
        ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj";
        name = Mojito;
    },
        {
        directions = "abds fedfsdkkjkljlkj;j ok";
        ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj";
        name = "After Drink Mint";
    },
        {
        directions = "abds fedfsdkkjkljlkj;j ok";
        ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj";
        name = "Apple Martini";
    },
        {
        directions = "abds fedfsdkkjkljlkj;j ok";
        ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj";
        name = "Shockwave";
    },
        {
        directions = "abds fedfsdkkjkljlkj;j ok";
        ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj";
        name = "Beer";
    },
        {
        directions = "abds fedfsdkkjkljlkj;j ok";
        ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj";
        name = "Last Desire";
    },
        {
        directions = "abds fedfsdkkjkljlkj;j ok";
        ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj";
        name = "Vodka";
    }
)
2011-10-01 20:27:01.942 DrinkMixer[1832:b303] Number = 9


cellForRowAtIndexPath的NSLog没有被调用。

谁能告诉我这段代码有什么问题。

谢谢。

最佳答案

可能是您未在头文件中实现UITableViewDelegate,或者您的nib文件中未连接UITableViewdatasource

我建议签出delegate

更新:

没有调用datasourcetableView:cellForRowAtIndexPath:设置正确的事实可能是plist已加载后,plist已加载到datasource中。证明可能是向上或向下滚动空白的self.drinks并查看屏幕外的单元格是否开始出现。

我建议两件事:


在您的UITableView开头致电UITableView
加载plist后,要求重新加载UITableView。


尝试:

- (void)viewDidLoad {

    [super viewDidLoad];

    NSString *path = [[NSBundle mainBundle] pathForResource:@"drinks" ofType:@"plist"];

    NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
    self.drinks = [tempDict objectForKey:@"Root"];
    NSLog(@"%@", self.drinks);
    NSLog(@"Number = %d", self.drinks.count);

    [yourTableView reload];

}


最后,我担心您的[super viewDidLoad];的原因是因为我认为即使是一个空单元格也应调用-(void)viewDidLoad

希望这可以帮助。

10-08 07:31
查看更多