私はAppleだけでなく他の人からの例をたどろうとしています。道に迷いました。
ユーザーのログインを処理するために使用するシングルトンクラスがあります(Webサーバーへのチャレンジなど)。
呼び出すことができるブロックを作成し、ユーザー名/パスワードを渡します。ブロックはWebサービス呼び出しを実行し、成功したかどうかにかかわらず戻ります。
これは私がこれまでに何とか仕事をすることができたものです:
私のシングルトンクラスは次のようになります。
.h
typedef void (^AMLoginBlock)(NSString *userName, NSString *password);
@interface AuthManager : NSObject
+ (id)sharedManager;
+ (bool)loginUserWithBlock:(AMLoginBlock)block;
@end
.m
@implementation AuthManager
+ (id)sharedManager
{
static dispatch_once_t pred = 0;
__strong static id _sharedObject = nil;
dispatch_once(&pred, ^{
_sharedObject = [[self alloc] init]; // or some other init method
});
return _sharedObject;
}
+ (bool)loginUserWithBlock:(AMLoginBlock)block {
NSLog(@"im printing from AM");
return true;
}
@end
次に、次のようにメソッドを呼び出します。
bool rtn = [AuthManager loginUserWithBlock:^(NSString *userName, NSString *password) {
NSLog(@"im here in the block LVC.");
}];
私の質問は3つの部分です:
ブロックと同様に、ブロックの完了ハンドラーを作成するにはどうすればよいですか
UIView animation...
。ブロックベースの実装からこれらのWebサービス呼び出しを実行することは良い考えですか?
次のようにブロックメソッドを宣言する必要があります。
- (bool)loginUserWithBlock:(AMLoginBlock)block;
+(bool)loginUser..
シングルトンクラスであるため、使用する代わりに。これにより、シングルトンの複数のインスタンスが作成されるかどうかはわかりません。
私の目標は、あなたが呼ぶようにこのブロックを呼び出すことができるようにすることです[UIView animation..]
。だから私は簡単に行うことができます:
[AuthManager loginUserWithUsername:foo
password:bar1
completion:^(BOOL finished) {
if (finished)
//push new view controller.
else
//spit out error
}];