使用Singleton类时,应用程序在启动屏幕上运行

时间:2016-08-01 08:52:08

标签: ios objective-c

我在整个项目中使用Application Manager As Singleton类。在Appdelegate中,我将tabbarviewcontroller(即storyboard中的rootviewcontroller)设置为applicationManger mainviewcontroller。

当我运行应用程序时,它会在启动屏幕上被触发,尽管控件转到了applicationManager函数,可以通过使用break points来观察...请帮助!!!

在AppDelegate中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

      [[ApplicationManager sharedService] setMainViewController:(UITabBarController *)self.window.rootViewController];

    return YES;
}

ApplicationManager.h

#import <UIKit/UIKit.h>

@interface ApplicationManager : NSObject<UITabBarControllerDelegate>
{
    UIImageView *imgView;
}

@property (nonatomic,weak) UITabBarController *mainViewController;

ApplicationManager.m

@implementation ApplicationManager

@synthesize mainViewController = _mainViewController;

+ (void)load
{
    [self performSelectorOnMainThread:@selector(sharedService) withObject:nil waitUntilDone:NO];
}

- (ApplicationManager *)init {


    if (self != nil) {
        self = [super init];

        self.exceptionErrorMessages = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:ErrorMessagesFileName ofType:ErrorMessagesFileType]];


    }
    return self;
}

+ (ApplicationManager *)sharedService {
    @synchronized(self) {
        static ApplicationManager *_service = nil;

        if (_service == nil) {
            _service = [[ApplicationManager alloc] init];
        }
        return _service;
    }
}

- (void)setMainViewController:(UITabBarController *)mainViewController
{

    _mainViewController = mainViewController;
    _mainViewController.delegate = self;
    UITabBarItem *loginItem =  _mainViewController.tabBar.items[3];
    UIImage *unSelectedImage = [[self imageFromString:@"" withColor:[UIColor redColor]]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    UIImage *selectedImage = [[self imageFromString:@"" withColor:[ColorUtility appBlueColor]]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    if ([SharedManager getInstance].isLoggedIn)
    {
        loginItem.title = @"Logout";
        [_mainViewController setSelectedIndex:TabBarTagInspection];
    }
    else
    {
        loginItem.title = @"Login";
        [_mainViewController setSelectedIndex:TabBarTagLogin];
    }

    UITabBarItem *syncItem = _mainViewController.tabBar.items[0];
    syncItem.image = [self imageFromString:@"" withColor:nil];
    UITabBarItem *inspectionItem = _mainViewController.tabBar.items[1];
    inspectionItem.image = [self imageFromString:@"\uE8ac" withColor:nil];
    UITabBarItem *vendorItem = _mainViewController.tabBar.items[2];
    vendorItem.image = [self imageFromString:@"\uE85f" withColor:nil];
    UITabBarItem *materialItem = _mainViewController.tabBar.items[3];
    materialItem.image = [self imageFromString:@"" withColor:nil];


    loginItem.image = unSelectedImage;
    loginItem.selectedImage = selectedImage;
}

STORYBOARD ScreenShot

enter image description here

1 个答案:

答案 0 :(得分:0)

上述代码的单人实施是错误的。静态变量应在共享函数之外定义。

@implementation ApplicationManager

static ApplicationManager *_service = nil;

共享功能正在重置_service变量。可能为时已晚,但我回答了一下,可能会对某人有所帮助

相关问题