我的classe包含我的数据 Data 我在第一个名为 ViewController 的视图中创建了我的对象 我将创建其他viewControllers,我想在我的ViewController中创建的对象“man1”中读取和写入数据。 我怎样才能做到这一点 ? 非常感谢你。
到目前为止,这是我的代码:
#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
#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
#import <UIKit/UIKit.h>
#import "Data.h"
@interface ViewController : UIViewController
{
int testint;
}
@property (readwrite) Data *man1;
@property (weak, nonatomic) IBOutlet UILabel *labelAff;
@end
#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
答案 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