我正在尝试通过其他以及 Apple 的示例。我迷路了。
我有一个单例类,用于处理我的用户登录(挑战网络服务器等)。
我想创建一个可以调用的块,传入用户名/密码。该块将执行 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.");
}];
我的问题是三个部分:
如何为类似于
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
}];