2015-09-21 2 views
1

У меня есть этот байт [] данные из веб-сервиса, который выглядит следующим образом (это лишь малая Porton его):Objective-C Преобразовать байт [], чтобы NSData

JVBERi0xLjQgU2hhcnAgU2Nhbm5lZCBJbWFnZVBERgolU2hhcnAgTm9uLUVuY3J5cHRpb24KMyAwIG9iago8PAovVHlwZSAvUGFnZQovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgNCAwIFIKL0NvbnRlbnRzIDUgMCBSCi9NZWRpYUJveCBbMCAwIDYxMyA3OTBdCj4+CmVuZG9iago0IDAgb2JqCjw8Ci9Qcm9jU2V0IFsvUERGIC9JbWFnZUJdCi9YT2JqZWN0IDw8IC9JbWcxIDYgMCBSID4+Cj4+CmVuZG9iago1IDAgb2JqCjw8Ci9MZW5ndGggMjcKPj4Kc3RyZWFtCjYxMyAwIDAgNzkwIDAgMCBjbQovSW1nMSBEbwplbmRzdHJlYW0KZW5kb2JqCjYgMCBvYmoKPDwKL1R5cGUgL1hPYmplY3QKL1N1YnR5cGUgL0ltYWdlCi9OYW1lIC9JbWcxCi9GaWx0ZXIgL0NDSVRURmF4RGVjb2RlCi9EZWNvZGVQYXJtcyA8PCAgL0sgLTEgL0NvbHVtbnMgMTcwNCAvUm93cyAyMTk2ID4+Ci9XaWR0aCAxNzA0Ci9IZWlnaHQgMjE5NgovQml0c1BlckNvbXBvbmVudCAxCi9Db2xvclNwYWNlIC9EZXZpY2VHcmF5Ci9MZW5ndGggNyAwIFIKPj4Kc3RyZWFtCvywYWH//////////////////////////X3////////////r5bIVv/Zbqq/D9fH//////////X//ymQ1vH/////X/f///69/9f////+/+vfr//+//9f/79e//9ZZmL/XG//9f/7////X/17////+vde///a/+V+RGlpyuOgQITiPMjojo8gQJTTI 

То, что я пытаюсь сделать помещает данные байта [] в переменную NSData, поэтому я могу сохранить этот PDF-файл, а отображение - в моем приложении.

Это то, что я пробовал:

NSArray *byteArray = [dataSource.areaData GetPDFFileData:[NSString stringWithFormat:@"%@",@""]]; 

     unsigned c = byteArray.count; 
     uint8_t *bytes = malloc(sizeof(*bytes) * c); 

     unsigned i; 
     for (i = 0; i < c; i++) 
     { 
      NSString *str = [byteArray objectAtIndex:i]; 
      int byte = [str intValue]; 
      bytes[i] = (uint8_t)byte; 
     } 

     NSData* data = [NSData dataWithBytes:(const void *)bytes length:sizeof(unsigned char)*c]; 

, но я получаю эту ошибку

-[__NSCFDictionary intValue]: unrecognized selector sent to instance 0x17eb28e0 

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary intValue]: unrecognized selector sent to instance 0x17eb28e0' 

на этой линии

int byte = [str intValue]; 

Как это исправить? что-то не так с моими байтами [] данными или тем, как я его конвертирую?

Ниже приводится изображение того, что находится в ByteArray,

enter image description here

Вот мой вызов, чтобы получить байт [] из WebService

-(NSArray *)GetPDFFileData:(NSString *)y 
{ 
    NSString *FileBrowserRequestString = [NSString stringWithFormat:@"%@?y=%@",kIP,y]; 
    NSURL *JSONURL = [NSURL URLWithString:FileBrowserRequestString]; 
    NSURLResponse* response = nil; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:JSONURL]; 
    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; 
    if(data == nil) 
     return nil; 
    NSError *myError; 
    NSArray *tableArray = [[NSArray alloc]initWithArray:[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&myError]]; 
    return tableArray; 
} 
+0

Ошибка, кажется, указывает, что ваш 'byteArray' фактически содержит' NSDictionary', а не 'NSNumber' или' NSString' - по крайней мере, при одном индексе. – rmaddy

ответ

1

У вас есть массив словаря объектов, элемент "data" содержит то, что похоже на массив байтов с кодировкой базы-64.

// Untested 
NSArray *array = [dataSource.areaData GetPDFFileData:@""]; 
for (NSDictionary *dict in array) { 
    NSString *base64 = dict[@"data"]; 
    NSData *data = [[NSData alloc] initWithBase64EncodedString:base64 
                 options:0]; 
    // Do something with data? 
} 
+1

безупречный! большое спасибо – user979331