私は他の人やアップルの例を辿っています。道に迷いました。自分のブロックメソッドを書く
私はユーザーのログインを処理するために使用するシングルトンクラスを持っています(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
私は、そうのようなメソッドを呼び出します。私はUIView animation...
ブロックと同様のブロックのために完了ハンドラを作成するにはどうすればよい
:
bool rtn = [AuthManager loginUserWithBlock:^(NSString *userName, NSString *password) { NSLog(@"im here in the block LVC."); }];
私の質問は、3つの部分です。
これらのWebサービスコールをブロックベースの実装から実行することをお勧めしますか?それはシングルトンクラスであるため
- (bool)loginUserWithBlock:(AMLoginBlock)block;
代わりに+(bool)loginUser..
を使用して:
私はそうのようなブロック法を宣言すべきです。シングルトンの複数のインスタンスが作成されるかどうかは不明です。
私の目標は、[UIView animation..]
のようにこのブロックを呼び出すことです。だから私は単純に行うことができます。
@property (nonatomic, copy) void (^completionHandler)(bool *);
あなたがブロックを保存しているので、あなたが持っている必要があります:あなたはクラスIVARに完了ブロックをコピーしたいと思うでしょう
[AuthManager loginUserWithUsername:foo
password:bar1
completion:^(BOOL finished) {
if (finished)
//push new view controller.
else
//spit out error
}];