在我的项目中,我有一个对象 MainAppDataObject
,我将在所有其他类之间全局使用它。我想在其中保留我在不同 viewControls 中需要的其他对象,并且可以轻松访问。我相信为此,我必须实现单例模式。
我尝试在 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 不会在任何时候初始化,也不会调用它的方法 load。这一行是我从项目开始时第一次使用 MC_GlobalObjects 对象。 上述代码的结果:sharedAppObj 被创建,并且它的 authLogin 为 nil (如预期)。当我将 logAgent 分配给 authLogin 时,会创建 authLogin 但其内容仍为零。 logAgent 中包含诸如 full_name、job_title 等属性的值。
任何人都可以帮助我知道为什么 logAgent 对象的值没有存储在 authLogin 中。然后我必须访问 ProfileViewController 中的 authLogin。
MainAppDataObject 或 AgentDetails 对象中是否有任何需要更正的内容。 MainAppDataObject.h
@interface MainAppDataObject : AppDataObject
{
AgentDetails *authLogin;
}
@property (nonatomic, copy) AgentDetails *authLogin;
实现文件:.m
@synthesize authLogin;
代理详细信息:.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;
问题出在哪里?谁能帮我解决一下。我可以跨许多 View Controller 和其他对象访问如此多的对象和数据。非常感谢任何帮助。多谢。我还在网站上提到了相同查询的其他问题,但找不到我面临的问题的解决方案。我环顾了一下[这里],here 2 , here , here等
最佳答案
一些事情。首先,没有理由拥有单独的 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 header ,然后使用如下代码:
[MainAppDataObject sharedAppDataObject].someString = @"Some string";
关于iOS : Fail to use Global object class - Singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584513/