无法为单例中的 BOOL 字段赋值
Posted
技术标签:
【中文标题】无法为单例中的 BOOL 字段赋值【英文标题】:Can't assign value to a BOOL field in a Singleton 【发布时间】:2011-08-13 16:19:48 【问题描述】:我有这个单身人士:
UserData.h
@interface UserData : NSObject
User *user;
+ (UserData *)sharedUserData;
@property (nonatomic, retain) User *user;
UserData.m
@implementation UserData
@synthesize user;
SYNTHESIZE_SINGLETON_FOR_CLASS(UserData);
- (id) init
self = [super init];
if (self != nil)
return self;
- (void) dealloc
[user release];
[super dealloc];
@end
User.h
@interface User : NSObject
int user_id;
NSString *username;
BOOL logged_in;
@property (nonatomic, assign) int user_id;
@property (nonatomic, retain) NSString *username;
@property (nonatomic, assign, getter=isLogged) BOOL logged_in;
@end
User.m
@implementation User
@synthesize user_id, username, logged_in;
- (id)init
self = [super init];
if (self)
// Initialization code here.
return self;
@end
在应用委托中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window.rootViewController = self.tabBarController;
BOOL logged_in = FALSE; // hardcoded for testing
UserData *userData = [UserData sharedUserData];
[[userData user] setLogged_in:logged_in];
if (!logged_in)
[self hideTabBar:self.tabBarController];
[self.window makeKeyAndVisible];
return YES;
到这里为止,它就像一个魅力。问题是在LoginViewController
中我更改了logged_in
的值:
BOOL logged_in = TRUE;
UserData *userData = [UserData sharedUserData];
[[userData user] setLogged_in:logged_in];
if (userData.user.isLogged)
NSLog(@"You're logged in.");
else
NSLog(@"You're not logged in.");
调试控制台提示我“您尚未登录”。为什么这个?怎么了?
【问题讨论】:
您可能希望在其初始化中为您的单例的可变用户分配内存。 【参考方案1】:- (id) init
self = [super init];
if (self != nil)
self.user = [[User alloc] init];
return self;
您还需要为单例的单个元素分配内存。
【讨论】:
谢谢!奇迹般有效。 :)以上是关于无法为单例中的 BOOL 字段赋值的主要内容,如果未能解决你的问题,请参考以下文章