2016-09-02 7 views
0

Я пишу звукозаписывающее устройство для iOS в родном C++, и я не могу использовать Foundation API.iOS - получить доступный для записи путь в C++

мне нужно что-то вроде этого:

recordFilePath = 
(CFStringRef)[NSTemporaryDirectory() stringByAppendingPathComponent: @"recordedFile.caf"]; 

Чтобы получить записываемый путь на iPhone.

Большое вам спасибо.

+0

Можете ли вы объяснить, почему вы не можете использовать API Foundation, если его предназначены для запуска на iPhone? – abidon

+0

Потому что он должен компилироваться с Cocos2d-x. – CttPla

+0

Я думаю, что это то, что я искал, если все еще справедливо: http://stackoverflow.com/questions/13469342/using-c-to-access-documents-folder-on-ios – CttPla

ответ

0

Конечно, вы можете, но говоря уверенно это задача для моего клиента, и он не запрашивал никаких внешних функций или мостов или чего бы то ни было с участием Фонда в основных классах. Поэтому мне пришлось создать компонент звукозаписи без ссылок на Foundation.

Для записи, я succedeed просто делает это:

 const char *home = getenv("HOME"); 
     const char *subdir = "/Documents/"; 
     const char *file = "recordedFile.caf"; 

     char *recPath = (char*)(calloc(strlen(home) + strlen(subdir) 
           + strlen(file) + 1, sizeof(char))); 

     strcpy(recPath, home); // copy string one into the result. 
     strcat(recPath, subdir); // append string two to the result. 
     strcat(recPath, file); // append string three to the result. 

     //recordFilePath is our CFStringRef 
     recordFilePath = CFStringCreateWithCString(0, recPath, kCFStringEncodingUTF8); 

     //recorder is an AQRecorder class like the one from SpeakHere code sample 
      recorder->StartRecord(recordFilePath); 
0

После комментирования OP, пример с использованием Objective-C++:

Utils.hpp:

#pragma once 
#include <string> 

std::string temporaryFilePath(const std::string &filename) 

Utils.mm:

#import "Utils.hpp" 
#import <Foundation/Foundation.h> 

std::string temporaryFilePath(const std::string &filename) 
{ 
    NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithUTF8String:filename.c_str()]]; 
    const char *rawFilePath = [filePath UTF8String]; 
    return rawFilePath; 
} 

WhereverYouWant.cpp:

#include "Utils.hpp" 

... 

std::string recordFilePath = temporaryFilePath("recordedFile.caf");