在我的项目中,我有一个对象MainAppDataObject
,我要在所有其他类之间全局使用。我想在不同的viewControls中保留我需要的其他对象,并且可以轻松访问。我相信,我必须实现Singleton模式。
我尝试在2天内实现,即使用AppDelegate和GlobalObjects,但无法在其他viewController中访问,或者无法设置要保存的对象。
使用GlobalObjects方法: 头文件:
@interface MC_GlobalObjects : NSObject
+(void) load;
+(MainAppDataObject*) sharedAppDataObject;
@end
实施档案.m:
#import "MC_GlobalObjects.h"
static MainAppDataObject* _sharedMainAppDataObject = nil;
@implementation MC_GlobalObjects
+(void) load {
_sharedMainAppDataObject = [[MainAppDataObject alloc] init];
}
+(MainAppDataObject*) sharedAppDataObject {
return _sharedMainAppDataObject;
}
@end
在我的LoginViewController.m中:
#import "MC_GlobalObjects.h"
MainAppDataObject *sharedAppObj = [MC_GlobalObjects sharedAppDataObject];
sharedAppObj.authLogin = logAgent;
我得到了上面的参考from here,我按照它的说法实现了。我导入MC_GlobalObjects.h,只需调用MC_GlobalObject类的sharedAppDataObject。 MC_GlobalObject obj不会在任何时候初始化,也不会调用它的方法加载。这一行是我第一次从项目的开始使用MC_GlobalObjects对象。 上面代码的结果:创建了sharedAppObj,它的authLogin为nil(如预期的那样)。当我将logAgent分配给authLogin时,会创建authLogin,但其内容仍为零。 logAgent在其中包含值,如full_name,job_title等属性。
任何人都可以帮助我知道,为什么logAgent对象的值不会存储在authLogin中。然后我在ProfileViewController中访问authLogin。
在MainAppDataObject或AgentDetails obj中是否需要更正。 MainAppDataObject.h
@interface MainAppDataObject : AppDataObject
{
AgentDetails *authLogin;
}
@property (nonatomic, copy) AgentDetails *authLogin;
实施档案:.m
@synthesize authLogin;
AgentDEtails:.h
@interface AgentDetails : NSObject <NSCopying>
@property (nonatomic, copy) NSString *full_name;
@property (nonatomic, copy) NSString *job_title;
@property (nonatomic, copy) NSString *photo;
@property (nonatomic, copy) NSNumber *agent_id;
@property (nonatomic, copy) NSString *agentSecret;
@property (nonatomic) bool chatStatus;
@property (nonatomic) bool onlineStatus;
@property (nonatomic, copy) NSNumber *session;
-(id) initWithNSDictionary: (NSDictionary *)loginInfo;
@end
实施.m:
@synthesize full_name;
@synthesize job_title;
问题出在哪里?任何人都可以帮我理清。我在许多viewControllers和其他对象中访问了很多对象和数据。任何帮助都非常感谢。非常感谢。我还在网站上引用了同一个查询的其他问题,但无法找到我面临的问题的解决方案。我浏览了[here],here 2,here,here等。
答案 0 :(得分:1)
有几件事。首先,没有理由拥有单独的MC_GlobalObjects和MainAppDataObject类。使您的MainAppDataObject对象成为单例。
其次,您不需要,也不应该使用+ load方法。如果对象尚未加载,则使sharedAppDataObject方法延迟加载:
@interface MainAppDataObject: NSObject
@property (nonatomic, strong) NSObject *someObject;
@property (nonatomic, strong) NSObject *someOtherObject;
@property (nonatomic, strong) NSString *someString;
+(MainAppDataObject) sharedAppDataObject;
@end
你的.m文件:
static MainAppDataObject* _sharedAppDataObject = nil;
@implementation
+(MainAppDataObject) sharedAppDataObject;
{
if (_sharedAppDataObject == nil)
_sharedAppDataObject = [[MainAppDataObject alloc] init];
return _sharedAppDataObject;
}
然后在项目的任何类中使用它,首先#import标题,然后使用这样的代码:
[MainAppDataObject sharedAppDataObject].someString = @"Some string";