2011-12-21 75 views
0

在某些属性上有错误消息。错误消息在以下代码中注释掉。不明白为什么我会收到此错误消息,即使属性是在其他文件中声明和合成的?看不到属性错误

PlayersViewController.m

#import "PlayersViewController.h" 
#import "Player.h" 
#import "PlayerCell.h" 


@implementation PlayersViewController 

@synthesize players; 


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
#warning Potentially incomplete method implementation. 
    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
#warning Incomplete method implementation. 
    // Return the number of rows in the section. 
    return [self.players count]; 
} 

- (UIImage *)imageForRating:(int)rating 
{ 
    switch (rating) { 
     case 1:return [UIImage imageNamed:@"1StarSmall.png"]; 
     case 2:return [UIImage imageNamed:@"2StarsSmall.png"]; 
     case 3:return [UIImage imageNamed:@"3StarsSmall.png"]; 
     case 4:return [UIImage imageNamed:@"4StarsSmall.png"]; 
     case 5:return [UIImage imageNamed:@"5StarsSmall.png"]; 

    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"PlayerCell"]; 
    Player *player = [self.players objectAtIndex:indexPath.row]; 
    cell.nameLabel.text = player.name; /*property 'nameLabel' not found on object of tupe "UITableViewCell" */ 
    cell.gameLabel.text = player.game; /*property 'gameLabel' not found on object of tupe "UITableViewCell" */ 
    cell.ratingImageView.image = [self imageForRating:player.rating]; /*property 'ratingImageView' not found on object of tupe "UITableViewCell" */ 
    return cell; 
} 

性质的声明,并实施了以下两个文件:

PlayerCell.h

#import <Foundation/Foundation.h> 

@interface Player : NSObject 

@property (nonatomic, copy) NSString *name; 
@property (nonatomic, copy) NSString *game; 
@property (nonatomic, assign) int rating; 

@end 

PlayerCell.m

#import "Player.h" 

@implementation Player 

@synthesize name; 
@synthesize game; 
@synthesize rating; 

@end 

回答

2

UITableViewCell没有名为nameLabel,gameLabel或ratingImageView的属性。如果您使用自己的自定义UITableViewCell子类,那么您需要告诉编译器您将消息发送到PlayerCell的实例,而不是UITableViewCell。

做这样的

PlayerCell *cell = (PlayerCell *) [tableView dequeueReusableCellWithIdentifier:@"PlayerCell"];

或者,你可以使用id和编译器不会有问题,如果你不使用点符号,但我会用明确的类版本明晰。

id cell = [tableView dequeueReusableCellWithIdentifier:@"PlayerCell"]; 
[cell nameLabel].text = @""; //etc 

顺便 - 如果这是你的实际代码,那么你没有实例您UITableViewCells这也可以证明是有问题。

static NSString *CellIdentifier = @"Cell"; 

PlayerCell *cell = (PlayerCell *)[tableView dequeueReusableCellWithIdentifier:@"PlayerCell"]; 
if (nil == cell){ 
    cel = [[[PlayerCell alloc] yourInitMethodWithCellIdentifier:CellIdentifier] autorelease]; 
} 
Player *player = [self.players objectAtIndex:indexPath.row]; 
cell.nameLabel.text = player.name; 
cell.gameLabel.text = player.game; 
cell.ratingImageView.image = [self imageForRating:player.rating]; 
return cell; 
+0

谢谢你的解释。这有效;再次感谢! – pdenlinger 2011-12-21 22:31:31

1

您有一个名为“PlayerCell.m”文件创建“播放器”,这是一个NSObject的实例。相反,您应该让“PlayerCell.m”创建“PlayerCell”的实例,该实例应该是UITableViewCell的一个子类。

从那里,PlayerCell应该具有的属性UILabel *nameLabelUILabel *gameLabel

你给你所谓的“PlayerCell.h”和“PlayerCell.m”的片段看起来不错,如果他们实际上是“Player.h”和“Player.m”代替。