在某些属性上有错误消息。以下代码中注释掉了错误消息。不明白为什么我收到此错误消息,即使在其他文件中声明和合成属性?
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
答案 0 :(得分: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;
答案 1 :(得分:1)
您有一个名为“PlayerCell.m”的文件,它创建的“Player”实例为NSObject
。相反,你应该让“PlayerCell.m”创建“PlayerCell”的实例,它应该是UITableViewCell
的子类。
从那里PlayerCell
应该有UILabel *nameLabel
和UILabel *gameLabel
等属性。
你给出的名为“PlayerCell.h”和“PlayerCell.m”的片段看起来很好,如果它们实际上是“Player.h”和“Player.m”而已。