M. Salih Kocak
M. Salih Kocak

Reputation: 189

Updating view with a data from the method of another class

I am trying to update my UIProgressView with some data from a method of my utility class. Now, just because for updating my UIProgressView, i am holding that method in my view controller class and everything works fine. Because i can reach the loop in that method with a global variable so i can update my progress. But if i want to move this method to my utility class, what am i supposed to do to keep informed my UIProgressView. Thanks.

Upvotes: 0

Views: 105

Answers (1)

Sash Zats
Sash Zats

Reputation: 5466

What I would suggest is to redesign your utility class to be a singleton

Here is an example of code of your utility class:

UtilityClass.h file:

@interface UtilityClass : NSObject

+ (UtilityClass *)sharedInstance;

- (CGFloat)awesomeMehod;

@end

UtilityClass.m

@implementation UtilityClass

+ (id)sharedInstance
{
    static UtilityClass *_instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[UtilityClass alloc] init];
    });
    return _instance;
}

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

    // Regular initialization, however keep in mind that it will be executed just once

    return self;
}

- (CGFloat)awesomeMethod
{
    return 42.0f
}

@end

Now from your view controller you will call

CGFloat progress = [[UtilityClass sharedInstance] awesomeMethod];
[self.progressView setProgress:progress];

keep in mind several things:

  • It's one of possible approaches and I would go and read about various design patterns that might come in handy one day

  • Probably a good idea to refresh knowledge on view controllers and the way they interact

  • For class to become a proper singleton, you also should override methods such as alloc, init, initWithZone, dealloc, release etc (list of methods to override will vary if you use ARC), here is an example of doing that, although dispatch_once takes care of @synchronize() call. For now, as long as you "instantiate" you class only through calling sharedInstance class method you will be fine.

Upvotes: 1

Related Questions