2015-11-29 4 views
2

В настоящее время я работаю над iOS-приложением, используя pjSIP и swift.зарегистрировать быстрый поток как pj_thread

Я получил метод на в .c-файл для посылки вызова, пусть это будет

void makeCall(const char *destUri){ 
    ... 
    status = pjsua_call_make_call(... 
} 

и я получил быстрый метод, который вызывается из основного потока, который вызывающая makeCall-функцию из C-файла.

Если это так, приложение падает и, говоря, что мне нужно зарегистрировать поток в pjSIP перед вызовом функций pjLib.

Чтобы зарегистрировать поток в pjSIP Мне нужно вызвать функцию pj_thread_register

Я пытался добавить нить, как UnsafeMutablePointer.

моих звонки выглядят как это прямо сейчас:

void makeCall(const char *destUri, long threadDesc, pj_thread_t **thread){ 
    ... 
    pj_thread_register(NULL, &threadDesc, thread); 
    status = pjsua_call_make_call(... 
} 


internal static func makeSIPCall(numberToCall: String){ 
    ... 
    let destination = ... //my call destination 
    let thread : NSThread = NSThread.currentThread() 
    let observer = UnsafeMutablePointer<CopaquePointer>(Unmanaged.passUnretained(thread.self).toOpue()) 

    makeCall(destination, Int(thread.description)! as Clong, observer) 

} 

Тема 1: EXC_Breakpoint и фатальная ошибка «нашел ноль в то время разворачивания необязательного значения»

Так как я могу передать необходимые свойства поток от swift до C?

+1

Это ужасно бит дизайна со стороны авторов pjSIP, поскольку он мешает вам использовать GCD - что естественно делать в этих обстоятельствах. – marko

+0

@marko это не ребята PJSIP, это ошибка Apple. У Swift все еще есть некоторые ограничения при использовании с C. – azimov

+0

скажите мне еще ... – marko

ответ

0

Постарайтесь не отправить ссылку из быстры, но использовать это непосредственно в вашем .c-файл:

void makeCall(const char *destUri, long threadDesc, pj_thread_t **thread){ 
    ... 
    pj_thread_desc a_thread_desc; 
    pj_thread_t *a_thread; 

    if (!pj_thread_is_registered()) { 
     pj_thread_register(NULL, a_thread_desc, &a_thread); 
    } 
    status = pjsua_call_make_call(... 
} 

Источник: ipjsua (демонстрационный проект, который вы получите после того, как строительство pjSIP)