这是一个objective-c问题。我创建了一个 NSObject 的子类 person,参数为“height”和“weight”,在一个名为 Person.h 的文件中包含属性和综合,该文件包含接口和实现。
我想将 Person.h 导入我的 viewcontroller.m 并创建人员对象并使用 2 个 IBActions 更改它们。
-(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 找不到 Bob,因为它是 alterperson_1 的局部变量。我的问题是我如何以及在 viewcontroller.m 中的何处将 Bob 分配为一个人,以便他的属性可以被两个 IBActions 更改。
我尝试在 viewdidload 以及 initwith nibname 方法中进行分配。那没起效。我也尝试过 viewcontroller.m 的实现{},但这也不起作用,因为 Bob 的分配不是编译时间常数。
谢谢!
用代码更新
因此,我现在可以正确导入 Person.h 文件(感谢 Robotnik),并且能够在整个 ViewController.m 中创建 Person 的实例——但是,我创建的实例 *bob 似乎没有保留其属性的值(请参阅注释通过代码中的 NSLog 语句)。我认为这是一个初始化问题,但我不知道在哪里初始化。目前,我在 viewDidLoad 中初始化时收到警告。当我的 IBAction 被调用时,如何让 bob.weight 打印 200,而不是我目前得到的 0?谢谢。
// 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
结束人.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