我有一个单例类,我打算在整个应用程序中共享它。 它看起来像这样:
的.m
@implementation PersonalGlobal
@synthesize firstName;
@synthesize lastName;
@synthesize SSN;
@synthesize customerNo;
@synthesize email;
@synthesize address;
@synthesize city;
@synthesize postalCode;
@synthesize telNo;
@synthesize mobileNo;
#pragma mark Singleton Methods
+ (id)sharedPersonal {
static PersonalGlobal *sharedPersonalGlobal = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedPersonalGlobal = [[self alloc] init];
});
return sharedPersonalGlobal;
}
- (void)dealloc {
[super dealloc];
// Should never be called
}
@end
·H
#import <foundation/Foundation.h>
@interface PersonalGlobal : NSObject {
NSString *firstName;
NSString *lastName;
NSString *SSN;
NSString *customerNo;
NSString *email;
NSString *address;
NSString *city;
NSString *postalCode;
NSString *telNo;
NSString *mobileNo;
}
@property (nonatomic, retain) NSString *firstName;
@property (nonatomic, retain) NSString *lastName;
@property (nonatomic, retain) NSString *SSN;
@property (nonatomic, retain) NSString *customerNo;
@property (nonatomic, retain) NSString *email;
@property (nonatomic, retain) NSString *address;
@property (nonatomic, retain) NSString *city;
@property (nonatomic, retain) NSString *postalCode;
@property (nonatomic, retain) NSString *telNo;
@property (nonatomic, retain) NSString *mobileNo;
+ (id)sharedPersonal;
@end
在代码中我将字符串保存到它:
PersonalGlobal *sharedPersonal = [PersonalGlobal sharedPersonal];
sharedPersonal.firstName = @"Some string";
但是当我改变视图并试图像这样访问字符串时:
PersonalGlobal *sharedPersonal = [PersonalGlobal sharedPersonal];
//Setting some textfield
sometextfield.text = sharedPersonal.firstName;
我一无所获。我在所有文件中都做了#import "PersonalGlobal.h"
。
我可以以任何方式将更改提交给单例类吗?
谁能看到我在这里做错了什么? 谢谢!
答案 0 :(得分:1)
您的实施看起来很好。如果你的单例返回唯一的一个实例,这应该有效。所以你的sharedPersonal
方法存在疑问。只是尝试在这个方法中添加断点,看看它是否每次都创建一个新实例。对于我得到的引用this那么问题。
如果没有,那么你也可以试试这个:
+(SingleTon *)getSharedInstance
{
static PersonalGlobal *sharedPersonalGlobal = nil;
if (sharedPersonalGlobal==nil)
{
sharedPersonalGlobal=[[PersonalGlobal alloc]init];
}
return sharedPersonalGlobal;
}
这是我的工作代码。
答案 1 :(得分:0)
您的单例实现看起来不错。如果在这种情况下你写的设置firstName
的代码永远不会被执行,我不会感到惊讶。如果我是你,我会逐步完成这些代码。