ios在两个以上的视图控制器之间传递一个对象

时间:2013-11-04 14:56:05

标签: ios objective-c oop

我的classe包含我的数据 Data 我在第一个名为 ViewController 的视图中创建了我的对象 我将创建其他viewControllers,我想在我的ViewController中创建的对象“man1”中读取和写入数据。 我怎样才能做到这一点 ? 非常感谢你。

到目前为止,这是我的代码:

Data.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

Data.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

1 个答案:

答案 0 :(得分:0)

您的方法不起作用,因为每次加载视图时都会分配Data的新实例,并且每个视图控制器都会获得自己的Data对象。

解决此问题的一种方法是making your Data class a singleton。您的视图控制器将访问Data的单个实例,确保信息在视图控制器之间共享:

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

Data.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