Terminating app while signing up a new user in Qui

2019-01-28 13:59发布

问题:

While signing up a new userin QuickBlox from ios applicaqtion with login and Password credentials, the app got crashed and the NSLog console shows the error as below,

Terminating app due to uncaught exception 'BaseServiceException', reason: 'You have missed the authorization call. Please insert following code inside your application [QBRequest createSessionWithSuccessBlock:errorBlock:]; Before any other code, that uses our service, but after setup credentials.

First throw call stack:(
0   CoreFoundation                      0x038365e4 __exceptionPreprocess + 180
1   libobjc.A.dylib                     0x02ca48b6 objc_exception_throw + 44
2   VideoChat                           0x00028e2f -[QBHTTPConnection generateRequestOperation:forPath:usingMethod:] + 1231
3   VideoChat                           0x00028092 -[QBConnection executeRequest:forPath:usingMethod:] + 162
4   VideoChat                           0x0001b049 +[QBRequest(QBAuth) signUp:successBlock:errorBlock:] + 825
5   VideoChat                           0x0000457d -[AppDelegate application:didFinishLaunchingWithOptions:] + 2077
6   UIKit                               0x017ff355 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 309
7   UIKit                               0x017ffb95 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1536
8   UIKit                               0x018043a8 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 824
9   UIKit                               0x0181887c -[UIApplication handleEvent:withNewEvent:] + 3447
10  UIKit                               0x01818de9 -[UIApplication sendEvent:] + 85
11  UIKit                               0x01806025 _UIApplicationHandleEvent + 736
12  GraphicsServices                    0x03d6b2f6 _PurpleEventCallback + 776
13  GraphicsServices                    0x03d6ae01 PurpleEventCallback + 46
14  CoreFoundation                      0x037b1d65 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
15  CoreFoundation                      0x037b1a9b __CFRunLoopDoSource1 + 523
16  CoreFoundation                      0x037dc77c __CFRunLoopRun + 2156
17  CoreFoundation                      0x037dbac3 CFRunLoopRunSpecific + 467
18  CoreFoundation                      0x037db8db CFRunLoopRunInMode + 123
19  UIKit                               0x01803add -[UIApplication _run] + 840
20  UIKit                               0x01805d3b UIApplicationMain + 1225
21  VideoChat                           0x00004cbd main + 141
22  libdyld.dylib                       0x033dc725 start + 0)

I'm using the below code to create a new user,

[QBRequest createSessionWithSuccessBlock:^(QBResponse *response, QBASession *session) {
    // session created
} errorBlock:^(QBResponse *response) {
    // handle errors
    NSLog(@"%@", response.error);
}];

QBUUser *user = [QBUUser user];
user.password = @"azhhdsf";
user.login = @"dsfgsgf";

// Registration/sign up of User
[QBRequest signUp:user successBlock:^(QBResponse *response, QBUUser *user) {
    // Sign up was successful
} errorBlock:^(QBResponse *response) {
    // Handle error here
    NSLog(@"error while signing up with QB");
}];

I saw an answer here on SO, but it throws an error, that delegate:self was deprecated and need to use the above method signUp: successBlock:.

Did anyone face this issue? How to fix this? Any suggestions would be greatly appreciated.

回答1:

All these requests are asynchronous and you can't use it this way.

The right way is to wait until session will be created and then sign up a user:

[QBRequest createSessionWithSuccessBlock:^(QBResponse *response, QBASession *session) {
    // session created

    QBUUser *user = [QBUUser user];
    user.password = @"azhhdsf";
    user.login = @"dsfgsgf";

    // Registration/sign up of User
    [QBRequest signUp:user successBlock:^(QBResponse *response, QBUUser *user) {
        // Sign up was successful
    } errorBlock:^(QBResponse *response) {
        // Handle error here
        NSLog(@"error while signing up with QB");
    }];
} errorBlock:^(QBResponse *response) {
    // handle errors
    NSLog(@"%@", response.error);
}];