0

UIProgressViewユーティリティクラスのメソッドからのデータで更新しようとしています。さて、更新のためUIProgressViewに、ビューコントローラクラスでそのメソッドを保持しているので、すべてが正常に機能します。グローバル変数を使用してそのメソッドのループに到達できるため、進行状況を更新できます。しかし、このメソッドをユーティリティクラスに移動したい場合は、通知を継続するために何をする必要がありますかUIProgressView。ありがとう。

4

1 に答える 1

1

私が提案するのは、ユーティリティクラスをシングルトンになるように再設計することです

ユーティリティクラスのコードの例を次に示します。

UtilityClass.hファイル:

@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

これで、ViewControllerから電話をかけます

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

いくつかのことに注意してください。

  • これは可能なアプローチの1つであり、いつか役立つ可能性のあるさまざまなデザインパターンについて読みに行きます 。

  • ビューコントローラとそれらが相互作用する方法に関する知識を更新することはおそらく良い考えです

  • クラスを適切なシングルトンにするには、、、、、などのメソッドもオーバーライドする必要があります(allocARC を使用する場合、オーバーライドするメソッドのリストは異なります) 。これは、 呼び出しを処理しますが、その例です。今のところ、クラスメソッドを呼び出すことによってのみクラスを「インスタンス化」する限り、問題はありません。initinitWithZonedeallocreleasedispatch_once@synchronize()sharedInstance

于 2012-08-15T07:31:33.810 に答える