Прежде всего, я не разработчик IOS, поэтому мне не хватает моих знаний.
Я приношу свои извинения, если этот вопрос тривиален, но я не достаточно разбираюсь в системе, чтобы знать, как даже отладить такую проблему, поэтому спасибо за потраченное время на мою проблему.
Мне было поручено написать приложение VoIP для IOS с использованием библиотеки PJSIP.
Моя функция макета работала нормально, и я начал сортировать вещи по их собственным классам, где все начало разваливаться.
Библиотека C требует большого количества переменных / указателей, на которые ссылаются. С моим новым экземпляром класса, если я помещаю все в конструктор init (), это работает. Но когда я начинаю разделять некоторые части для разделения методов внутри одного и того же класса, переменные, кажется, меняют контрольные точки.
Вот макет, написанный в блокноте, так как я не могу предоставить сам код, и в этот час у меня нет доступа к Mac:
class Account {
var accId: c_library_type = 0
var accCfg: c_library_type2 = c_library_type2()
init()
{
c_config_setting_defaults(&self.accCfg)
//other code
}
public func register()
{
c_register_method(&self.accId, &self.accCfg) //Throws "exc_bad_access code=1 address=0x0"
}
}
//Somewhere else in the code
var account: Account = Account()
account.register()
Если бы я должен был сделать
class Account {
var accId: c_library_type = 0
var accCfg: c_library_type2 = c_library_type2()
init()
{
c_config_setting_defaults(&self.accCfg)
//other code
c_register_method(&self.accId, &self.accCfg)
}
}
//Somewhere else in the code
var account: Account = Account()
Нет проблем, и c_register_method работает как положено.
Буду очень признателен за любую помощь по этому вопросу.
Edit: библиотека c файлом и методами, которые выдают исключение памяти:
https://github.com/chakrit/pjsip/blob/master/pjsip/src/pjsua-lib/pjsua_acc.c#L116
https://github.com/chakrit/pjsip/blob/master/pjsip/src/pjsip/sip_util.c#L435