2016-10-19 3 views
1

私はNSURLSessionを使ってデータベースに接続しています。
これは既にC++ for Windowsに実装されており、iOSでも動作させようとしています。
私の.mmファイルのヘッダーであるベースC++クラスから派生した.hファイルがあります。
もし私が正しいのであれば、私の.hファイルのすべての関数をC++で実装する必要があります。
しかし、NSURLSessionはObjective-C関数です。

C++関数からObjective-Cメソッドを呼び出すにはどうすればよいですか?Objective C++:C++のObjective Cメソッドを呼び出す

私はConnect()と呼ばれるC++関数を持っています。ここでは、allocとinitを持つC++オブジェクトm_Delegateを作っています。

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

インターフェースが持っている - (ブール値)Iから呼び出すしようとしている(@implementationで実装して)NSConnect:私も私のCを使用して、それを試してみました

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

は++オブジェクト

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

私はこれを3回チェックしました。笑。それは.mm :)です。 – annaisarobot

答えて

2
-(bool)NSConnect 

ここで、-はインスタンスメソッドであることを示します。逆に+は、クラスメソッドを示します。

つまり、[PrivateNSURLSessionDelegate NSConnect];は、インターフェイスPrivateNSURLSessionDelegateで呼び出すので、クラスメソッドを呼び出します。 ただし、これは定義されていません。NSConnectがインスタンスメソッドとして定義されています(規則は、(インスタンス)メソッドは常に小文字で始まります)。

[m_Delegate NSConnect]; 

ただし、インスタンスメソッドを呼び出します。 PrivateNSURLSessionDelegateのヘッダーファイルに-(bool)NSConnectを定義する必要があります。これは、実装ファイルの@implementationを超えてはいけません。これはプライベートメソッドで作成されるため、アクセスできません。

+0

クイック返信ありがとう! – annaisarobot

+0

"enter"を押すことを意味しませんでした。 インスタンスメソッドが必要です。これは@implementation内にあるはずの(bool)NSConnectですか?そして、私はそれを@interfaceで定義しました。あれは正しいですか?申し訳ありませんが、私は本当にこれに新しいです。 – annaisarobot

+0

はい、正しいと思います。たとえば、[this](http://blog.teamtreehouse.com/beginners-guide-objective-c-classes-objects)チュートリアル、特に実装ファイルの部分を参照してください。 @ gnasher729の答えは、おそらくC++の問題に沿ったものです。 – Thomm

0

CのスーパーセットであるObjective-Cと、C++のスーパーセットであるObjective-C++があります。 Objective-C++のソースコードファイルの拡張子は.mmで、Objective-Cの拡張子は.mです。

C++からObjective-Cを呼び出すことはできません。ただし、Objective-C++からObjective-Cを呼び出すことはできますし、通常のC++クラスもObjective-C++で記述することができます。

+0

さて、クール!説明をありがとう。私はObjective-C++からObjective-Cメソッドを呼び出そうとしていると思います。 – annaisarobot

+0

Objective-C++はC++のスーパーセットではありません。 Objective-C++ではObjective-CコードとC++を混在させることができます。たとえば、Objective-CではC++から継承できません。逆もまた同様です。 –

関連する問題