Это проблема объективного c. Я создал подкласс NSObject с параметрами «высота» и «вес», со свойством и синтезом в файле с именем Person.h, который содержит как интерфейс, так и реализацию.
Я хочу импортировать Person.h в свой viewcontroller.m и создавать объекты person и изменять их с помощью 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 не может найти Боба, потому что это локальная переменная для alterperson_1. Мой вопрос в том, как и где в viewcontroller.m мне выделить Боба как человека, чтобы его атрибуты могли быть изменены обоими IBActions.
Я пробовал размещать в viewdidload, а также в методах initwith nibname. Это не работает. Я также пробовал реализовать {} viewcontroller.m, но это тоже не сработало, потому что распределение Боба не является постоянной времени компиляции.
Спасибо!
Обновить с помощью кода
Итак, теперь у меня есть файл Person.h, импортируемый правильно (спасибо Robotnik), и я могу создавать экземпляры Person во всем ViewController.m - однако мой созданный экземпляр * bob, похоже, не сохраняет значения для своих свойств (см. Комментарии с помощью операторов NSLog в коде). Я думаю, что это проблема инициализации, но я не знаю, где инициализировать. В настоящее время я получаю предупреждение при инициализации в viewDidLoad. Как мне заставить bob.weight печатать 200 при вызове моего IBAction вместо 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
конец 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