Próbuję przeglądać przykłady z innych, jak i Apple. Zgubiłem się.Pisanie własnej metody blokowania
Mam klasę singleton, której używam do obsługi logowania użytkownika (kwestionuje serwer WWW itp.).
Chcę utworzyć blok, do którego mogę zadzwonić, podać nazwę użytkownika/hasło. Blok wykona połączenia z serwisem internetowym, a następnie zwróci je, jeśli się powiedzie, lub nie.
To co już udało się uzyskać pracę do tej pory:
Moja Singleton klasy wygląda następująco:
.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
I następnie wywołać metodę tak:
bool rtn = [AuthManager loginUserWithBlock:^(NSString *userName, NSString *password) {
NSLog(@"im here in the block LVC.");
}];
Moje pytanie jest z trzech części:
Jak mogę napisać o zakończeniu obsługi dla bloku podobnego do
UIView animation...
bloku.Czy to dobry pomysł, aby wykonywać te połączenia z usług sieciowych w oparciu o implementację blokową?
powinienem być deklarowania metody bloku tak:
- (bool)loginUserWithBlock:(AMLoginBlock)block;
zamiast korzystania +(bool)loginUser..
ponieważ jest klasą singleton. Nie jestem pewien, czy spowoduje to utworzenie wielu wystąpień singletonu.
Moim celem jest móc wywoływać ten blok, tak jak nazywasz [UIView animation..]
. Więc mogę po prostu zrobić:
[AuthManager loginUserWithUsername:foo
password:bar1
completion:^(BOOL finished) {
if (finished)
//push new view controller.
else
//spit out error
}];