XCode 4: ошибка во время выполнения «нераспознанный селектор отправлен в экземпляр»

#ios #static #singleton

#iOS #статический #синглтон

Вопрос:

Я разрабатываю статическую библиотеку и создаю свою библиотеку lib.a.

Когда я использую эту библиотеку в проекте iOS (приложение для iPhone, созданное с флагами -ObjC и -all_load для компоновщика), я получаю эту ошибку во время выполнения :

 unrecognized selector sent to instance
  

Эта ошибка возникает, когда я пытаюсь вызвать метод класса.

   (MyObject *) GetSingleton;
  

Для информации, я не получаю ошибку при вызове метода экземпляра.

 - (void) Log;
  

У вас есть представление о проблеме?

Комментарии:

1. Как именно вы вызываете синглтон?

2. Я вызываю это с помощью этой строки кода : [[MyObject GetSingleton] Log];

3. Вы выделяете и инициализируете экземпляр для синглтона?

4. Да, это реализация getSingleton : if (_singleton == nil) { _singleton = [[super allocWithZone:NULL] init]; }

5. Дополнительная информация о проблеме будет полезна. Предоставьте больший фрагмент кода (лучше, если это будет заголовок и реализация вашего синглтона), трассировку стека с аварийным завершением и полную ошибку с указанием имени метода. Спасибо 😉

Ответ №1:

Когда вы создадите свой синглтон, попробуйте это:

   (MyObject *)GetSingleton {
    static MyObject* singletonInstance; 

    @synchronized(self) {
        if (!singletonInstance)
            singletonInstance = [[MyObject alloc] init]; 
    }

    return singletonInstance;
}
  

Надеюсь, это поможет.

Комментарии:

1. Спасибо за ответ, но это не работает, все та же ошибка

2. Если я не использую статическую библиотеку и импортирую свой одноэлементный класс в свой проект, проблем нет! У тебя есть идея?

Ответ №2:

Хм, я исправил проблему, повторно создав свой проект!

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

Теперь, с новым проектом и ссылкой на мою статическую библиотеку, во время выполнения все в порядке.

Возможно, это была проблема из-за множества созданных мной статических библиотек, вероятно, с плохим кэшем или зависимостями…

Спасибо разработчикам за ваши ответы!