1

私は自分のデータを含むクラスを持っています。ViewControllerという 最初のビューでオブジェクトを 作成しました。他のビューコントローラーを作成し、ViewController で作成されたオブジェクト「man1」でデータを読み書きしたいと考えています。どうやってやるの ?どうもありがとうございました。

これまでの私のコードは次のとおりです。

データ.H

#import <Foundation/Foundation.h>

@interface Data : NSObject
{
    NSString *name;
    int age;
    NSString *city;
}
- (id)initWithName:(NSString *)aName ;

- (NSString*) name;
- (int) age;
- (NSString*) city;

//- (void) setPrenom:(NSString*) prenom;
- (void) setName:(NSString*) newName;
- (void) setAge:(int) newAge;
- (void) setCity:(NSString*) newCity;

@end

データ.m

#import "Data.h"

@implementation Data


- (id)initWithName:(NSString *)aName
{
    if ((self = [super init]))

    {
    self.name = aName;

}
    return self;

}


//getter
- (NSString*) name
{
    return name;
}

- (int) age{
    return age;

}

- (NSString*) city{
    return city;
}


//setter
- (void) setName:(NSString*)newName
{
    name = newName;
}
- (void) setAge:(int) newAge
{
    age = newAge;
}
- (void) setCity:(NSString *)newCity
{
    city = newCity;
}



@end

ViewController.h

#import <UIKit/UIKit.h>
#import "Data.h"

@interface ViewController : UIViewController
{
    int testint;

}


@property (readwrite) Data *man1;
@property (weak, nonatomic) IBOutlet UILabel *labelAff;


@end

ViewController.m

#import "ViewController.h"
#import "Data.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize man1 = _man1;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    NSString * name1 = @"Bob";
    _man1 = [[Data alloc]initWithName:name1  ];
    NSLog(@" %@ ", _man1.name);

    [_man1 setAge:29];
    NSLog(@" %d ", _man1.age);


    [_man1 setCity:@"Tapei"];
    _labelAff.text = [_man1 city];

}



- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
4

1 に答える 1

0

Dataビューがロードされるたびに新しいインスタンスを割り当て、各ビューコントローラーが独自のDataオブジェクトを取得するため、このアプローチは機能しません。

これを修正する 1 つの方法はDataクラスを singletonにすることです。ビュー コントローラーは の 1 つのインスタンスにアクセスしData、ビュー コントローラー間で情報が共有されるようにします。

データ.h

@interface Data : NSObject 
{
    NSString *name;
    int age;
    NSString *city;
}
- (id)initWithName:(NSString *)aName ;

- (NSString*) name;
- (int) age;
- (NSString*) city;

- (void) setName:(NSString*) newName;
- (void) setAge:(int) newAge;
- (void) setCity:(NSString*) newCity;
+(Data*)instance;
@end

データ.m

@implementation Data

-(id)initWithName:(NSString *)aName {
    if(self=[super init]) {
        ...
    }
    return self;
}

+(Data*)instance {
    static dispatch_once_t once;
    static Data *sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] initWithName: ...];
    });
    return sharedInstance;
}
@end
于 2013-11-04T15:01:02.823 に答える