【发布时间】:2011-05-25 15:14:42
【问题描述】:
我遇到了单例实现的问题。我想在我的单身中保存的一个对象似乎被破坏了,我不知道为什么。任何帮助表示赞赏。
这里是单例的代码: 会话服务.h
#import <Foundation/Foundation.h>
/**
This class provides a simple way of getting information about the connected user
*/
@class UserIHM;
@interface SessionServices : NSObject {
@private
UserIHM *user; //the object to retain
}
@property (nonatomic, retain) UserIHM *user;
sessionServices.m
@implementation SessionServices
@synthesize user;
static SessionServices *INSTANCE = nil;
+ (SessionServices*)sharedInstance
{
if (INSTANCE == nil) {
INSTANCE = [[super allocWithZone:NULL] init];
}
return INSTANCE;
}
....
//singleton impl from apple documentation
...
}
用户IHM.h
@interface UserIHM : NSObject {
@private
NSString *tagUID;
NSString *username;
BOOL isAdmin;
}
@property (nonatomic,retain) NSString *tagUID;
@property (nonatomic,retain) NSString *username;
@property (nonatomic) BOOL isAdmin;
然后在 SessionServices.m 我调用:
user = [[IHMObjectFinderServices sharedInstance] getUserByTagUID:userTagUID];
并且用户的所有字段都填写了正确的信息。
taguid = 2ac6912a 用户名 = 迈克 isAdmin = 否
然后我尝试使用此信息来设置我的 UITableView 的标题
self.navigationItem.title = [NSString stringWithFormat:@"Projects: %@",[[[SessionServices sharedInstance] user] username]];
如果我 NSLog 并使用调试器,我可以看到用户名变成了
CFString 无效
我做错了什么?
【问题讨论】:
-
如何在单例中初始化
UserIHM *user?您没有在代码中显示... -
@sergio thans 你的回答,这可能是问题所在,但我不确定在哪里初始化它,因为 sharedInstance 是一个类方法。我以为它在 user = [[IHMObjectFinderServices sharedInstance] getUserByTagUID:userTagUID];
-
@albertamg 谢谢你的回答,我会试试的
标签: objective-c singleton memory-management retain