私はいくつかのCソースを使用するiOSプロジェクトを持っています。Cの部分では、メインバンドル内のファイルへのパスが必要です。Obj-Cを使用せずに入手するにはどうすればよいですか?
基本的に、パスを次の人から返してもらいたいです。
NSLog(@"%s",[[[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"txt"] fileSystemRepresentation]);
私はいくつかのCソースを使用するiOSプロジェクトを持っています。Cの部分では、メインバンドル内のファイルへのパスが必要です。Obj-Cを使用せずに入手するにはどうすればよいですか?
基本的に、パスを次の人から返してもらいたいです。
NSLog(@"%s",[[[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"txt"] fileSystemRepresentation]);
したがって、上記のようにパスを取得してから、C文字列バージョンを取得します。
NSString *path = [[[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"txt"] fileSystemRepresentation];
char *cPath = [path cStringUsingEncoding:UTF8StringEncoding];
ドキュメントの警告に注意を払い、現在のメソッド/関数の終わりを超えて文字列を保持する予定がある場合は、文字列をコピーしてください。
返されるC文字列は、レシーバーが解放されるか、現在の自動解放プールが空になるまでのいずれか早い方までのみ有効であることが保証されます。この時間を超えてC文字列を格納する必要がある場合は、C文字列をコピーするか、getCString:maxLength:encoding:を使用する必要があります。
更新:何らかの理由でFoundationを使用できない場合は、CoreFoundationを使用して同様のことを行うことができます。CFBundleCopyResourceURL()
(またはそのいとこの1つ)を呼び出してリソースのURLを取得し、を使用してそれをパスに変換できますCFURLCopyPath()
。
Objective-cを使用してパスを読み取り、関数を呼び出してchar*としてcクラスに渡すのが最善です。
さらに、objective-cとCの両方に表示されるグローバル変数char*を割り当てることができます。