1

iOS開発初心者です。

Petというクラスがあります

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

私のメソッドの 1 つで、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」の正しい値が表示されますが、「null」が表示されます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

2 つの問題があります。Pet *selectedPet;1 つ目は、コード行の場所です。そのようなメソッドの外側の .m ファイルに配置すると、グローバル変数になります。これはおそらくあなたが望むものではありません。おそらくインスタンス変数にしたいと思うでしょう。.m ファイルの先頭に次のようなものがあります。

@implementation MyViewController {
    Pet *selectedPet;
}

2 番目の問題は、 のデフォルト値が であること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 に答える