我確定這很簡單,但我似乎無法弄清楚。我基本上是試圖用C++來生成一個HTML字符串並將其返回以存儲在一個客觀的c模型類中,以便稍後在web視圖中使用。字符串神祕地消失將字符串從C++帶到Obj C++
它的C++方面似乎運行良好。這裏這就是所謂的CPP文件的方法:
const char *SqliteConnection::htmlTest(){
HtmlItemValueTableBuilder htmlBuilder = HtmlItemValueTableBuilder();
std::string s = htmlBuilder.test();
cout << "TEST RESULT: " <<s;
return s.c_str();
}
的COUT輸出如下(這是我想要的):
TEST RESULT: <!doctype html><html><head></head><div><STYLE type="text/css"> body { margin: 10%; } table { border-spacing: 5px; } td { background-color: #EFEFEF; font-size: 20px; padding: 4px; padding-left: 4px; padding-right: 4px; } tr { margin-bottom: 10px; margin-top: 10px; } </STYLE><table><thead></thead><tbody>
<tr><td>hello</td><td>world</td></tr>
</tbody></table></div></html>
下面的代碼在一個單獨的目的調用它C++(.mm)文件:
-(NSString *)getFieldsMapAsHtmlForResult:(Result *)result {
const char *s = _sqliteConnection->htmlTest();
NSLog(@"Before Conversion: %s", s);
NSString *htmlString = [NSString stringWithUTF8String:s];
NSLog(@"After Conversion: %@",htmlString);
return htmlString;
}
我見過很多人建議使用stringWithUTF8String交流字符串轉換爲NString。這在過去對我有用,但由於某種原因,在兩個NSLog輸出中,我什麼都沒有返回。該字符串神祕地消失。
你能推薦什麼可能導致此?
----- UPDATE ---- 根據退休忍者的建議,我試圖確保引用的指針不是一個超出範圍的變量。我有一個Result模型C++類,我成功傳遞給了我的obj C++代碼。我決定添加一個數據成員fields_map_as_html,並將函數傳遞給它,而不是傳遞給我的obj-C++代碼。
您正在返回一個指向立即超出範圍的局部變量的指針。 –
此外,stringWithUTF8String僅適用於您確定要傳遞UTF8文本。 – StilesCrisis
@StilesCrisis - 我之前讀過這篇文章,但我不確定我如何能夠驗證我所傳遞的信息。任何建議? – ThinkBonobo