IOS Crash Log NSObject doesNotRecognizeSelector: - on which line?

I recorded the crash of my application, but the last line in my application (5 Control) indicates only the beginning of the method. How to find out which line the problem is?

0   CoreFoundation                  0x185f0af50 __exceptionPreprocess + 132
1   libobjc.A.dylib                 0x1924141fc objc_exception_throw + 60
2   CoreFoundation                  0x185f0fc04 -[NSObject(NSObject) doesNotRecognizeSelector:] + 220
3   CoreFoundation                  0x185f0d930 ___forwarding___ + 912
4   CoreFoundation                  0x185e2d5dc _CF_forwarding_prep_0 + 92
5   Control                         0x10005acb4 -[PaymillPaymentService handleTransactionListRequest:] (PaymillPaymentService.m:211)
6   Foundation                      0x186a7416c __103+[__NSOperationInternal _observeValueForKeyPath:ofObject:changeKind:oldValue:newValue:indexes:context:]_block_invoke96 + 28
7   libdispatch.dylib               0x1929ec014 _dispatch_call_block_and_release + 24
8   libdispatch.dylib               0x1929ebfd4 _dispatch_client_callout + 16
9   libdispatch.dylib               0x1929f32b8 _dispatch_root_queue_drain + 556
10  libdispatch.dylib               0x1929f34fc _dispatch_worker_thread2 + 76
11  libsystem_pthread.dylib         0x192b816bc _pthread_wqthread + 356
12  libsystem_pthread.dylib         0x192b8154c start_wqthread + 4

Here is the [long] method. I see a couple of places where I can add a check, but how do I know for sure that I fixed the problem? The problem is sporadic and I cannot reproduce it easily.

- (void)handleTransactionListRequest:(ServiceRequest *)serviceRequest
{
    LRURLRequestOperation* operation = serviceRequest.operation;
    NSHTTPURLResponse *response = (NSHTTPURLResponse *)operation.URLResponse;

    if (response.statusCode == 200)
    {
        if (operation.responseData)
        {
            NSError *parserError = nil;
            NSDictionary *data = [NSJSONSerialization JSONObjectWithData:operation.responseData options:0 error:&parserError];


            //NSLog(@"%@", data);
            if (!parserError)
            {
                NSArray* transactions = [data objectForKey:@"data"];

                if (0 == serviceRequest.currentOffset)
                {
                    NSNumber* totalCountObj =  [data objectForKey:@"data_count"];
                    serviceRequest.totalCount = [totalCountObj intValue];
                }

                int loadedCount = 0;
                if (transactions)
                {
                    for (id object in transactions)
                    {
                        TransactionInfo* info  = [self createTransactionFrom:object];
                        [serviceRequest.transactionList addTransaction:info];
                        [info release];
                        loadedCount++;
                    }

                }

                if (loadedCount + serviceRequest.currentOffset >= serviceRequest.totalCount)
                {
                    if ([serviceRequest.delegate respondsToSelector:@selector(transactionListLoadingComplete:)])
                        [serviceRequest.delegate transactionListLoadingComplete:serviceRequest];

                    serviceRequest.transactionList.timeStamp = [[NSDate date] timeIntervalSince1970];
                    NSLog(@"COMPLETE: %d transaction loaded ", serviceRequest.totalCount);
                }
                else
                {
                    serviceRequest.currentOffset += loadedCount;

                    bool needToContinue = YES;

                    if ([serviceRequest.delegate respondsToSelector:@selector(transactionListLoadingContinue:)])
                        needToContinue = [serviceRequest.delegate transactionListLoadingContinue];

                    if (needToContinue)
                    {
                        [self continueRetrievingTransactionListFor:serviceRequest];
                        NSLog(@"CONTINUE: %d of %d loaded ", serviceRequest.currentOffset, serviceRequest.totalCount);
                    }

                }

                return; // all OK cases
            }
        }

    }

    if ([serviceRequest.delegate respondsToSelector:@selector(transactionListLoadingFailed:with:)])
        [serviceRequest.delegate transactionListLoadingFailed:serviceRequest with:response.statusCode];
    NSLog(@"ERROR: Loading Transactions Response Code: %ld", (long)response.statusCode);

}
+4
source share
1 answer

Short answer:

You send a message to an object that cannot correctly respond to it. The stack trace tells you that when making a call, [PaymillPaymentService handleTransactionListRequest:]PaymillPaymentService cannot accept handleTransactionListRequest.

Long answer:

:

5 0x10005acb4 - [PaymillPaymentService handleTransactionListRequest:] (PaymillPaymentService.m: 211)

, PaymillPaymentService.m 211 PaymillPaymentService handleTransactionListRequest, . rmaddy, Hot Licks Paulc11 , 211 handleTransactionListRequest ( , ). , .

, PaymillPaymentService.m , .

+2

Source: https://habr.com/ru/post/1546757/


All Articles