iOS : Fail to use Global object class - Singleton

标签 ios objective-c cocoa singleton

在我的项目中,我有一个对象 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/

相关文章:

ios - 如何在 iOS 中从 block 返回值

ios - 使用 NSMutableAttributedString 后,UILabel 中的 numberOfLines 不工作

ios - 自定义 plist 文件中的变量

ios - 我如何在 View Controller 之间传递 UIImageView?

cocoa - 无法从模型 Controller 对象写入 NSTextField

ios - SpriteKit 网络物理(各种设备)

ios - 延迟一定时间后重复短促的声音

objective-c - 打印Webview的页眉和页脚

cocoa - 如何将 NSTableView 列设置为使用等宽数字?

ios - viewForAnnotation 混淆和迭代自定义 pinColor