iOS:单例返回null
我有一个单例,我将数据传递给它,但它返回null。在我的情况下,你能帮助我吗。提前感谢:) 这是我的密码 卡片.hiOS:单例返回null,ios,singleton,Ios,Singleton,我有一个单例,我将数据传递给它,但它返回null。在我的情况下,你能帮助我吗。提前感谢:) 这是我的密码 卡片.h @property (weak,nonatomic) NSString *email; @property (weak,nonatomic) NSString *fName; @property (weak,nonatomic) NSString *lName; @property (weak,nonatomic) NSString *category; +(Card *)get
@property (weak,nonatomic) NSString *email;
@property (weak,nonatomic) NSString *fName;
@property (weak,nonatomic) NSString *lName;
@property (weak,nonatomic) NSString *category;
+(Card *)getCard;
@property (strong,nonatomic) NSString *email; //Let the modal be strong property
@property (strong,nonatomic) NSString *fName;
@property (strong,nonatomic) NSString *lName;
@property (strong,nonatomic) NSString *category;
+(Card *)getCard;
Card.m
@synthesize email;
@synthesize fName;
@synthesize lName;
@synthesize category;
static csCard *instance;
+(Card *) getCard
{
@synchronized (self)
{
if(instance == nil)
{
instance = [[Card alloc]init];
}
}
return instance;
}
- (id) init{
self.email = [[NSUserDefaults standardUserDefaults]stringForKey:@"email"];
self.fName = [[NSUserDefaults standardUserDefaults]stringForKey:@"firstName"];
self.lName = [[NSUserDefaults standardUserDefaults]stringForKey:@"lastName"];
self.category = @"TestCategory";
return self;
}
Card *card = [Card getCard];
[card setEmail:self.emailField.text];
NSLog(@"%@",card.email);
static Card *instance;
+(Card *) getCard
{
@synchronized (self)
{
if(instance == nil)
{
instance = [[Card alloc]init];
}
}
return instance;
}
- (NSString)email{
return [[NSUserDefaults standardUserDefaults]stringForKey:@"email"];
}
- (void)setEmail:(NSString)email{
[[NSUserDefaults standardUserDefaults] setString:email forkey:@"email"];
}
Card *card = [Card getCard];
[card setEmail:self.emailField.text];
NSLog(@"%@",card.email);
这是我的测试代码,看看它是否工作
测试.m
@synthesize email;
@synthesize fName;
@synthesize lName;
@synthesize category;
static csCard *instance;
+(Card *) getCard
{
@synchronized (self)
{
if(instance == nil)
{
instance = [[Card alloc]init];
}
}
return instance;
}
- (id) init{
self.email = [[NSUserDefaults standardUserDefaults]stringForKey:@"email"];
self.fName = [[NSUserDefaults standardUserDefaults]stringForKey:@"firstName"];
self.lName = [[NSUserDefaults standardUserDefaults]stringForKey:@"lastName"];
self.category = @"TestCategory";
return self;
}
Card *card = [Card getCard];
[card setEmail:self.emailField.text];
NSLog(@"%@",card.email);
static Card *instance;
+(Card *) getCard
{
@synchronized (self)
{
if(instance == nil)
{
instance = [[Card alloc]init];
}
}
return instance;
}
- (NSString)email{
return [[NSUserDefaults standardUserDefaults]stringForKey:@"email"];
}
- (void)setEmail:(NSString)email{
[[NSUserDefaults standardUserDefaults] setString:email forkey:@"email"];
}
Card *card = [Card getCard];
[card setEmail:self.emailField.text];
NSLog(@"%@",card.email);
但是这个代码给我(null)
将其替换为此代码
static Card *instance;
+(Card *) getCard
{
@synchronized (self)
{
if(instance == nil)
{
instance = [[Card alloc]init];
}
}
return instance;
}
实例对象的类名错误,在singleton方法中,返回的数据类型也错误。我想你会明白我在说什么 在什么帮助下ḯ Sujjesu可以如下修改您的代码,因为 行
静态csCard*实例代码>你正在使用csCard
我认为这是打字错误,所以你最好这样做
#import "Card.h"
static dispatch_once_t onceDispach;
@implementation Card
@synthesize email = _email;
@synthesize fName;
@synthesize lName;
@synthesize category;
static Card *instance = nil; //change this to Card because this instance which is of type Card
+(Card *)getCard
{
dispatch_once(&onceDispach, ^{
instance = [[self alloc] init];//careate Card shared object named instance
});
return instance;
}
- (id) init
{
self.email = [[NSUserDefaults standardUserDefaults]stringForKey:@"email"];
self.fName = [[NSUserDefaults standardUserDefaults]stringForKey:@"firstName"];
self.lName = [[NSUserDefaults standardUserDefaults]stringForKey:@"lastName"];
self.category = @"TestCategory";
return self;
}
@end
- (NSString *)email
{
return _email;
}
- (void)setEmail:(NSString *)email
{
_email = email;
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:email forKey:@"email"];
}
在您使用此共享实例的类中,使用如下所示
- (void)actionMathodCalled
{
Card *card = [Card getCard];
NSLog(@"before saving to defaults->%@",card.email);
[card setEmail:@"happyCoding@ymail.com"];
NSLog(@"after savng to defaults->%@",card.email);
}
像这样修改您的类
卡片.h
@property (weak,nonatomic) NSString *email;
@property (weak,nonatomic) NSString *fName;
@property (weak,nonatomic) NSString *lName;
@property (weak,nonatomic) NSString *category;
+(Card *)getCard;
@property (strong,nonatomic) NSString *email; //Let the modal be strong property
@property (strong,nonatomic) NSString *fName;
@property (strong,nonatomic) NSString *lName;
@property (strong,nonatomic) NSString *category;
+(Card *)getCard;
Card.m
@synthesize email;
@synthesize fName;
@synthesize lName;
@synthesize category;
static csCard *instance;
+(Card *) getCard
{
@synchronized (self)
{
if(instance == nil)
{
instance = [[Card alloc]init];
}
}
return instance;
}
- (id) init{
self.email = [[NSUserDefaults standardUserDefaults]stringForKey:@"email"];
self.fName = [[NSUserDefaults standardUserDefaults]stringForKey:@"firstName"];
self.lName = [[NSUserDefaults standardUserDefaults]stringForKey:@"lastName"];
self.category = @"TestCategory";
return self;
}
Card *card = [Card getCard];
[card setEmail:self.emailField.text];
NSLog(@"%@",card.email);
static Card *instance;
+(Card *) getCard
{
@synchronized (self)
{
if(instance == nil)
{
instance = [[Card alloc]init];
}
}
return instance;
}
- (NSString)email{
return [[NSUserDefaults standardUserDefaults]stringForKey:@"email"];
}
- (void)setEmail:(NSString)email{
[[NSUserDefaults standardUserDefaults] setString:email forkey:@"email"];
}
Card *card = [Card getCard];
[card setEmail:self.emailField.text];
NSLog(@"%@",card.email);
不需要重写init
在你的测试课上
它应该是workOk。现在在测试类中,您在哪个位置编写代码(例如:单击按钮)?我认为你正在用任何一种视图循环方法编写测试类的代码,即在viewDidLoad或ViewWillDisplay上,原因是当时textfield值将为null,因为用户没有输入值。谢谢!这么强是我唯一的问题:)顺便说一句,感谢setter和getter方法提示,它真的很有用:D+100000