1

我是 iOS 开发的新手。

我有一门课叫宠物

@interface Pet : NSObject
@property(nonatomic, strong) NSString *petName;
@property(nonatomic, strong) NSString *petBreed;
@end

在我的一种方法中,我试图为 Pet 类型的声明对象设置值:

Pet *selectedPet;

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{        
UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
NSString *currentPetTemp,*currentBreedTemp;
currentPetTemp = cell.textLabel.text;
currentBreedTemp = cell.detailTextLabel.text;
selectedPet.petName = currentPetTemp;
selectedPet.petBreed = currentBreedTemp;
NSLog(@"%@ Name1: %@",selectedPet.petName,currentPetTemp);

return indexPath;

}

NSLog 为 'currentPetTemp' 显示正确的值,但为selectedPet.petName.

任何帮助,将不胜感激。

4

2 回答 2

4

您尚未对其进行初始化...执行以下操作:

Pet *selectedPet=[[Pet alloc]init];

或者,

 Pet *selectedPet=[Pet new];

编辑:

根据您的评论Initializer element is not a compile time constant,当您定义任何方法范围之外的变量时,会显示此警告。这个地方仅适用于常量值。

你需要在 viewDidLoad/init/awakeFromNib 中进行 alloc-init。

于 2013-01-19T13:23:07.150 回答
1

有两个问题。第一个是Pet *selectedPet;代码行的位置。如果您只是将它放在类似方法之外的 .m 文件中,它将是一个全局变量;这可能不是你想要的。您可能希望将其设为实例变量。像,在你的 .m 文件的顶部:

@implementation MyViewController {
    Pet *selectedPet;
}

第二个问题是默认selectedPet值为nil; 也就是说,它是空的。你需要先初始化它。我会建议这样的东西,它创建一个新的宠物对象,然后设置名称和品种:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{        
    UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
    selectedPet = [[Pet alloc] init];
    selectedPet.petName = cell.textLabel.text;
    selectedPet.petBreed = cell.detailTextLabel.text;
    NSLog(@"%@ Name1: %@",selectedPet.petName,currentPetTemp);

    return indexPath;
}

(这假设您使用的是 ARC;否则,您需要进行一些内存管理。)

于 2013-01-19T14:06:32.573 回答