0

わかりましたので、次のファイルを持つ小さなプログラムがあります。
- HomeViewController (.h .m .xib)
- DataViewController (.h .m .xib)
- AppDelegate (.h .m)
- Person (.h .m) [OBJECT]
+ サポート ファイルなど...

HomeViewController のテキスト ボックスやその他の入力を介してユーザー入力を取得し、それらを Person (年齢、学年など) のインスタンスのプロパティとして設定するとします。DataViewController からそれら (同じインスタンス) にアクセスして表示するにはどうすればよいですか? ?

HomeViewController.h および .m
.hからのコード スニペットを次に示します。

@interface HomeViewController : UIViewController {

    IBOutlet UIButton *done;

    BOOL standardRes;
}

@property (nonatomic) int newAge;
@property (nonatomic) int newGrade;

-(IBAction)doneButtonPressed;

@end

.m

@implementation HomeViewController
@synthesize newAge, newGrade;

-(IBAction)doneButtonPressed{
    Person *user = [[Person alloc]init]; //Creating an instance of Person called user
    user.age = newAge; //Do I even need this if I use setters and getters in person.m?
    user.grade = newGrade; //Do I even need this if I use setters and getters in person.m?
    NSLog(@"Age: %i, Grade: %i", user.age, user.grade); //Testing with NSLog

    newAge = 175;
    [user setAge:(int)newAge]; //Calling setter method for property 'age' in Person.m

    DataViewController *vc = [[DataViewController alloc]init];
    [self.navigationController pushViewController:vc animated:YES];
}

そして、ここにちょっとした Person.h と .m があります

@interface Person : NSObject {

}

@property (nonatomic, getter = age, setter = setAge:) int age;
@property (nonatomic) int grade;

@end


@implementation Person
@synthesize age, grade;

-(void)setAge: (int) newAge {
    age = newAge;
}

-(int)age {
    return age;
}

@end


注:
- ナビゲーション コントローラーの使用
- iOS 6
- xCode 4.5.1
+ さらに情報が必要な場合はお知らせください。:)

PS私はこのことに少し慣れていないので、これはばかげた質問かもしれません;)

4

2 に答える 2

2

それ以外の

DataViewController *vc = [[DataViewController alloc]init];

独自の初期化子を作成し、Personオブジェクトを渡します。すなわち

DataViewController.h

- (id)initWithPerson:(Person*)person;

// Need a way to store it, either through a property
@property (nonatomic, strong) Person* person;

DataViewController.m

// Or you can store it as an instance variable, via Class Extension
@interface DataViewController() {
    Person* m_person;
}
@end

// Either way you store it, do it here
-(id)initWithPerson:(Person*)person {
    self = [super init];
    if (self) {
        self.person = person;
        // OR
        m_person = person;
    }
    return self;
}

HomeViewController.m

-(IBAction)doneButtonPressed {
    Person *user = [[Person alloc]init]; //Creating an instance of Person called user
    user.age = newAge; //Do I even need this if I use setters and getters in person.m?
    user.grade = newGrade; //Do I even need this if I use setters and getters in person.m?
    NSLog(@"Age: %i, Grade: %i", user.age, user.grade); //Testing with NSLog

    newAge = 175;
    [user setAge:(int)newAge]; //Calling setter method for property 'age' in Person.m

    DataViewController *vc = [[DataViewController alloc]initWithPerson:user];
    [self.navigationController pushViewController:vc animated:YES];
}
于 2012-10-27T17:39:19.347 に答える
0

これを行うにはいくつかの方法が考えられます。

1- HomeViewController に、Person オブジェクトを含む何らかの種類のコンテナまたはリストを作成します。その後、DataViewController でこのリストを呼び出し、get() メソッドを使用して目的の人を取得できます。

2-アプリで必要な人が1人だけの場合(アプリで複数の人のオブジェクトが必要な場合、これは機能しません)、人をシングルトンにすると、プログラムで人オブジェクトを作成しようとするたびに最初にチェックされますこのオブジェクトのインスタンスが既に存在し、存在しない場合は新しいインスタンスが返されますが、人物オブジェクトが既に存在する場合は、既存の人物が返されます。

シングルトン パターンの説明とサンプル コードは次のとおりです

于 2012-10-27T17:58:58.430 に答える