これはObjective-cの問題です。パラメータ「height」と「weight」を使用してNSObjectのサブクラスpersonを作成し、プロパティを使用して、インターフェイスと実装の両方を含むPerson.hというファイルに合成しました。
Person.hをviewcontroller.mにインポートし、personオブジェクトを作成し、2つのIBActionを使用してそれらを変更したいと思います。
-(IBAction)alterperson_1{
person *bob = [person alloc]init];
bob.height = 72;
bob.weight = 200;
}
-(IBAction)alterperson_2{
bob.height = 80;
bob.weight = 250;
}
メソッドalterperson_2は、alterperson_1のローカル変数であるため、Bobを見つけることができないため、この配置は機能しません。私の質問は、viewcontroller.mのどこでどのようにボブを人として割り当て、両方のIBActionによって彼の属性を変更できるようにするかです。
viewdidloadとinitwithnibnameメソッドで割り当てを試しました。それは動かなかった。viewcontroller.mの実装{}も試しましたが、Bobの割り当てがコンパイル時定数ではないため、これも機能しません。
ありがとう!
コードで更新
したがって、Person.hファイルを正しくインポートし(Robotnikに感謝)、ViewController.m全体でPersonのインスタンスを作成できます-ただし、作成したインスタンス* bobは、そのプロパティの値を保持していないようです(コメントを参照)コード内のNSLogステートメントによる)。これは初期化の問題だと思いますが、どこで初期化するのかわかりません。現在、viewDidLoadで初期化すると警告が表示されます。IBActionが呼び出されたときに、現在取得している0ではなくbob.weightを取得して200を出力するにはどうすればよいですか?ありがとう。
// Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject{
int weight;
int height;
}
@property int weight, height;
@end
終了Person.h
//Person.m
#import "Person.h"
@implementation Person
@synthesize weight, height;
@end
終了Person.m
//ViewController.h
#import <UIKit/UIKit.h>
#import "person.h"
@interface ViewController : UIViewController{
}
@property Person *bob;
-(IBAction)persontest:(id)sender;
@end
ViewController.hを終了します
//ViewController.m
#import "ViewController.h"
@implementation ViewController
@synthesize bob;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
Person *bob = [[Person alloc]init]; // this causes a local declaration warning, if I remove this code, however, it still doesn't work
bob.weight = 100;
NSLog(@"viewDidLoad bob's weight, %i", bob.weight); // this will print 100, but only because I made the local initialization. The value is lost once the viewDidLoad Method ends.
}
-(IBAction)persontest:(id)sender{
bob.weight = bob.weight + 100;
NSLog(@"IBAction bob's weight %i", bob.weight); // this prints 0, probably because value is nil. How can I make it print 200?
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end
ViewController.mを終了します