2016-10-19 12 views
1

Я использую NSURLSession для подключения к базе данных.
У меня это уже реализовано в C++ для Windows, и я пытаюсь заставить его работать и с iOS.
У меня есть .h файл, полученный из базового класса C++, который является заголовком для моего файла .mm.
Если я прав, мне нужно реализовать все функции в моем файле .h на C++.
Однако NSURLSession - это функция Objective-C.

Как мне вызвать метод Objective-C из моей функции C++?Objective C++: вызов метода Object C из C++

У меня есть функция C++, называемая Connect(), где я создаю объект C++ m_Delegate, который имеет alloc и init.

this->m_Delegate = [[PrivateNSURLSessionDelegate alloc] initWihParent:this]; 
//where PrivateNSURLSessionDelegate is the name of my interface. 

Этот интерфейс имеет - (BOOL) NSConnect (с реализацией в @implementation), который я пытаюсь звонить из:

void Connect() 
{ 
    [PrivateNSURLSessionDelegate NSConnect]; 
    //This however gives me the error: +[PrivateNSRLSessionDelegate NSConnect]: unrecongnized selector sent to class 
} 

Я также пробовал с помощью моего C++ объект

void Connect() 
{ 
    [m_Delegate NSConnect]; 
    //This gives me a error that is unrecognized selector sent to instance 
} 

Есть ли лучший способ сделать это? Я в основном хочу попросить Objective-C делать все материалы NSURL и отправлять только данные обратно на C++.

Я совершенно не знаком с Objective-C, поэтому всякая помощь будет принята с благодарностью! Благодаря!

+0

Глупый вопрос, но вы обязательно установили расширение своего класса Objective-C++ на '.mm'? –

+0

Я трижды проверил это. Лол. Это .mm :). – annaisarobot

ответ

2
-(bool)NSConnect 

Здесь - указывает, что это метод экземпляра. Наоборот + будет указывать метод класса.

Это, как говорится, [PrivateNSURLSessionDelegate NSConnect]; вызывает метод класса, так как вы вызываете его на интерфейсе PrivateNSURLSessionDelegate. Однако это не определено, поскольку оно определено как NSConnect определено как метод экземпляра (кстати, соглашение состоит в том, что методы (экземпляры) всегда начинаются с нижнего регистра).

[m_Delegate NSConnect]; 

Как бы то ни было вызов метода экземпляра. Вы должны определить -(bool)NSConnect в файле заголовка PrivateNSURLSessionDelegate, не выше @implementation в файле реализации, который делает в частном методе и, следовательно, недоступен.

+0

Спасибо за быстрый ответ! – annaisarobot

+0

Упс. Не означает, что нужно нажать «enter». Так что я хочу метод экземпляра, который должен быть - (bool) NSConnect, который должен быть в @implementation? И я определил его как таковой в @interface. Это верно? Извините, я на самом деле новичок в этом. – annaisarobot

+0

Да, это звучит правильно. См., Например, учебник [this] (http://blog.teamtreehouse.com/beginners-guide-objective-c-classes-objects), особенно часть файлов реализации. Ответ @ gnasher729 может быть больше в соответствии с вашей проблемой C++, хотя .. – Thomm

0

Существует Objective-C, который является надмножеством C и Objective-C++, который является надмножеством C++. Файлы исходного кода Objective-C++ имеют .mm-суффикс, где Objective-C имеет суффикс .m.

Вы не можете вызвать Objective-C из C++. Однако вы можете вызвать Objective-C из Objective-C++, и вы можете также писать свои обычные классы C++ в Objective-C++.

+0

Хорошо, круто! Спасибо за разъяснения. Я предполагаю, что я пытаюсь сделать это, вызов метода Objective-C из Objective-C++. – annaisarobot

+0

Objective-C++ не является надмножеством C++. Objective-C++ позволяет смешивать C++ с кодом Objective-C, иначе они полностью разделены. Например, вы не можете наследовать от C++ в Objective-C и наоборот. –