【发布时间】:2014-09-02 17:09:37
【问题描述】:
我有两个类:一个超类 User 和它的子类 UserSession。用户极其简单,只是一些instanceVariables的容器:
//User.h
@interface User : NSObject
- (id)initWithJSON:(NSDictionary *)JSONDictionary;
-(NSNumber *)getUserID;
-(NSString *)getUserName;
-(NSString *)getUserUsername;
-(NSString *)getUserEmail;
-(NSString *)getUserBio;
-(void)setUserID:(NSNumber *)userID;
-(void)setUserName:(NSString *)userName;
-(void)setUserUsername:(NSString *)userUsername;
-(void)setUserEmail:(NSString *)userEmail;
-(void)setUserBio:(NSString *)userBio;
@end
和
//User.m
@interface User()
@end
@implementation User
NSNumber *_userID;
NSString *_userName;
NSString *_userUsername;
NSString *_userEmail;
NSString *_userBio;
- (id)initWithJSON:(NSDictionary *)JSONDictionary
{
self = [super init];
if (!self)
return nil;
_userID = JSONDictionary[@"userID"];
_userName = JSONDictionary[@"userName"];
_userUsername = JSONDictionary[@"userUsername"];
_userEmail = JSONDictionary[@"userEmail"];
_userBio = JSONDictionary[@"userBio"];
return self;
}
为 iVar 加上相关的 setter 和 getter。
UserSession 是一个单例类,它是 User 的子类:
//UserSession.m
@interface UserSession ()
@end
@implementation UserSession
static UserSession *_session = nil;
-(void)updateUserForUserSessionWithParams:(NSDictionary *)params
{
[self setUserID:params[@"userId"]];
[self setUserName:params[@"userName"]];
[self setUserUsername:params[@"userUsername"]];
[self setUserEmail:params[@"userEmail"]];
[self setUserBio:params[@"userBio"]];
}
+ (instancetype)sharedSession
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// Create a session
_session = [[UserSession alloc] init];
});
return _session;
}
问题出在:当我拨打类似
的电话时[[UserSession sharedSession]
updateUserForUserSessionWithParams:@{@"userId":@1],
@"userName":@"Steve Smith",
@"userUsername":responseObject[@"ssmith"],
@"userEmail":responseObject[@"ssmith@test.com"],
@"userBio":responseObject[@"I'm steve smith"]}];
然后在其他地方:
NSString* stringName = [[UserSession sharedSession] getUserName];
NSString* stringUsername = [[UserSession sharedSession] getUserUsername];
NSString* stringBio = [[UserSession sharedSession] getUserBio];
这些吸气剂返回零!
抱歉所有代码,但我认为我做错了什么。任何帮助都会很棒。
提前致谢!
【问题讨论】:
-
我想我们需要看一个 setter 和 getter 的例子,但是你必须想知道为什么你要自己编写这些,而你可以简单地使用 Objective-C 属性?
@property NSNumber *userID;可以解决问题并为您节省大量代码。此外,我们还需要查看-[UserSession init]方法。 -
对 ObjectiveC 来说还是新手,所以我只是为了自己的理智而自己编写它们。我认为这并不重要。我没有 -[UserSession init] 虽然。我会在里面放什么?
标签: objective-c singleton subclass superclass