Objective-C&C ++接口GSCBufferString为字符串

问题描述 投票:0回答:3

我正在为C ++类编写Objective-C包装器。在OC方面,我必须拿一个NSData(从json文件中读取)从中获取一个列表并将其转换为std::vector< std::string >。这是我到目前为止的代码(在mm文件中):

NSData *input = [NSData dataWithContentsOfFile:[NSString stringWithUTF8String:"1455469592904_acceldata742283.json"]];    
NSError* error;
    NSDictionary* jsonArray = [NSJSONSerialization JSONObjectWithData:input options:NSJSONReadingMutableContainers error:&error];
    NSMutableArray *accdata = [jsonArray valueForKeyPath:@"data.accelerometer" ];
    int size = [accdata count];
    vector<string> cppAccdata;
    for (int i = 0; i< size; i++){
        //~ cppAccdata.push_back();
        NSLog(@"%@",[accdata objectAtIndex:i]);
        }

accdata松散地说是一个字符串列表。 json文件基本上看起来像这样(有更多的行但是旁边的点):

{
  "data" : {
    "accelerometer" : [
      "1455463005.714     -8.311620700836182     -3.969735990142822     -3.737648066711425",
      "1455463005.724     -8.256703700256347     -4.017769660949707     -3.680336864471435" ] }}

代码的输出是:

2016-02-15 14:18:16.212 test-OC[10300] 1455463066.241     -7.960421244812011     -4.400093738555908     -3.746177410125732
2016-02-15 14:18:16.212 test-OC[10300] 1455463066.261     -8.019677735900878     -4.377498460388184     -3.634847032928467
2016-02-15 14:18:16.212 test-OC[10300] GSCBufferString

从技术上讲,我需要将[accdata objectAtIndex:i]转换为std :: string,我猜这可以通过C const char *工作,但是我无法找到任何关于将GSCBufferString转换成任何东西的东西。我怎样才能做到这一点?也许有一种更优雅的方式来循环accdata

c++ objective-c json
3个回答
1
投票
NSArray *accdata = [jsonArray valueForKeyPath:@"data.accelerometer" ];
vector<string> cppAccdata;
for (NSString *str in accdata) {
    cppAccdata.push_back(str.UTF8String);
}

0
投票

试试这个:

NSArray *jsonArray;
NSArray *accData = [jsonArray valueForKeyPath:@"data.accelerometer"];
vector<string> cppAccdata;
for (NSString *str in accData){
    std::string *accString = new std::string([str UTF8String]);
    cppAccdata.push_back(*accString);

}

0
投票

提出的两个答案在进行转换时是正确的,但是循环语法没有编译。这种解决方法有效:

int size = [accdata count];
vector<string> cppAccdata;
for (int i = 0; i< size; i++){
    cppAccdata.push_back([[accdata objectAtIndex:i] UTF8String]);
        }
© www.soinside.com 2019 - 2024. All rights reserved.