2017-01-16 10 views
2

Я хочу, чтобы мое приложение отображало IncomingCall ViewController, когда приложение получает входящий вызов.Невозможно показать onComingCall ViewController для моего приложения IOS VoIP

Это мой код, который я использую для отображения входящего звонка .. Из моего ContactViewController, который является активным, когда происходит входящий звонок.

- (void)showIncomigCallVC{ 
    [self performSegueWithIdentifier:@"segueToIncomingCallVC" sender:nil]; 
} 

Это мой код, который называется Библиотекой.

/* Callback called by the library upon receiving incoming call */ 
static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, 
         pjsip_rx_data *rdata) 
{ 
    pjsua_call_info ci; 

    PJ_UNUSED_ARG(acc_id); 
    PJ_UNUSED_ARG(rdata); 

    pjsua_call_get_info(call_id, &ci); 



    PJ_LOG(3,(THIS_FILE, "....\n\n\n Incoming call from %.*s!! \n\n\n", 
      (int)ci.remote_info.slen, 
      ci.remote_info.ptr)); 

    ContactsViewController *incomingCallVC = [[ContactsViewController alloc]init]; 
    [incomingCallVC showIncomigCallVC]; 

    /* Automatically answer incoming calls with 200/OK */ 
    pjsua_call_answer(call_id, 200, NULL, NULL); 
} 

И это моя консоль Вывод:

20:39:37.482  XCPjsua.c ...... 


Incoming call from <sip:[email protected]>!! 



2017-01-16 20:39:37.494 simpleVoIP[922:19652] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<ContactsViewController: 0x7bea3d00>) has no segue with identifier 'segueToIncomingCallVC'' 
*** First throw call stack: 
(
    0 CoreFoundation      0x03a14212 __exceptionPreprocess + 194 
    1 libobjc.A.dylib      0x034d3e66 objc_exception_throw + 52 
    2 UIKit        0x01a69893 -[UIViewController shouldPerformSegueWithIdentifier:sender:] + 0 
    3 simpleVoIP       0x00089ba6 -[ContactsViewController showIncomigCallVC] + 70 
    4 simpleVoIP       0x00086caf on_incoming_call + 255 
    5 simpleVoIP       0x000fc273 pjsua_call_on_incoming + 3811 
    6 simpleVoIP       0x00103294 mod_pjsua_on_rx_request + 84 
    7 simpleVoIP       0x0012938f pjsip_endpt_process_rx_data + 351 
    8 simpleVoIP       0x00128bf2 endpt_on_rx_msg + 546 
    9 simpleVoIP       0x0012fba1 pjsip_tpmgr_receive_packet + 849 
    10 simpleVoIP       0x001315ec udp_on_read_complete + 316 
    11 simpleVoIP       0x0014b8e0 ioqueue_dispatch_read_event + 704 
    12 simpleVoIP       0x0014d5b2 pj_ioqueue_poll + 946 
    13 simpleVoIP       0x001290c3 pjsip_endpt_handle_events2 + 163 
    14 simpleVoIP       0x00102023 worker_thread + 99 
    15 simpleVoIP       0x0014eb96 thread_main + 86 
    16 libsystem_pthread.dylib    0x04c8a11b _pthread_body + 184 
    17 libsystem_pthread.dylib    0x04c8a063 _pthread_body + 0 
    18 libsystem_pthread.dylib    0x04c8993e thread_start + 34 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Я новичок, любая рекомендация будет понятно .. спасибо заранее

+0

Просто прочитал сообщение об ошибке: 'ContactsViewController', откуда вы звоните' showIncomigCallVC' не SEGUE на раскадровке, созданной с идентификатором '' segueToIncomingCallVC. Чтобы решить нашу проблему, можете ли вы показать «ContactsViewController» на раскадровке? Особенно в той части, где у вас есть настройки. Я ожидаю что-то вроде этого: http://imgur.com/a/SMKjT – dirtydanee

+0

да ..! Я могу показать и поблагодарить за ответ – Eesha

+0

@dirtydanee см. Это: https://drive.google.com/open?id=0B9eGVWZOsrOmRHVsMENTNTBQTHc – Eesha

ответ

2

Вы испытываете аварии, потому что вы программно выделить ваш ContactsViewController, вместо использования от storyboard.

Когда вы сделаете это:

ContactsViewController *incomingCallVC = [[ContactsViewController alloc]init]; 
[incomingCallVC showIncomigCallVC]; 

Вы создаете экземпляр ContactsViewController, то, что не имеет ничего общего с тем, созданной в нашем storyboard.
Можно было бы преодолеть это, однако, вы пытаетесь сделать вызов segue на viewController, что было загружено только в память, но не видно вообще. Это никогда не сработает, оно всегда будет падать.

Я бы порекомендовал себя, чтобы показать viewController, независимо от того, что стоит за ним, сразу же, вместо того, чтобы создавать viewController и показывать его с помощью segue.

EDIT:

Используя код, приведенный ниже, вы должны быть в состоянии представить нужную UIViewController подкласс от конца вашей функции обратного вызова.

// Lets get keywindow 
UIWindow* keyWindow = [[[UIApplication sharedApplication] delegate] window]; 
keyWindow.frame = [UIScreen mainScreen].bounds; 

// Lets get `IncomingCallViewController` from storyboard 
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"TheNameOfYourStoryboard" bundle:nil]; 
// do not forget to set the identifier of your viewController on the storyboard as "IncomingCallViewController" 
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"IncomingCallViewController"]; 
// Lets present the keyWindow from the main thread 
dispatch_async(dispatch_get_main_queue(), ^{ 
    keyWindow.rootViewController = vc; 
    [keyWindow makeKeyAndVisible]; 
}); 
+0

Хорошо, я пробую это. – Eesha

+0

, пожалуйста, дайте мне знать о вашем прогрессе. – dirtydanee

+0

Вы имеете в виду, я должен сделать это кодирование? ContactsViewController * incomingCallVC; [incomingCallVC showIncomigCallVC]; – Eesha