Intereting Posts
Как настроить значения UIPickerView с использованием информации, полученной из viewDidLoad? Установка основного объекта данных на nil ios5: пользовательское текстовое поле как делегат класса родителя Перемещение UIView на экране, почему это работает? Работа с графикой iPhone на Simulator не на устройстве Изображение не отображается. Правильно для Iphone 5 Retina Запретить просмотр перемещения при изменении ориентации Как я могу использовать данные из reverseGeocodeLocation в swift? Ошибка возврата ячейки Как преобразовать строку date в NSDate с NSDateFormatter Xcode не может найти основной файл для Cocoapod, который я импортирую, несмотря на то, что он там iOS: изменение черного цвета в UIImage на другой цвет UITableViewCell делегировать indexPath Захват видео с помощью видеозаписи UIImagepickerController с пользовательским наложением UITextView: присвоение атрибутаText на iOS 6 приводит к неожиданному результату

Как преобразовать файл Blob в NSData?

У меня возникла проблема с преобразованием файла Blob из Webservice в объект NSData. Файл Blob может быть любым типом файла. Я могу запросить файл с веб-сервера через RestKit и получить следующий ответ:

[{ "FileBlob": [ 65, 108, 108, 111, 99, 46, 32, 83, /* more integer values omitted */ ], "FileID": 1234567890, "FileName": "name.txt" }] 

Я конвертирую ответ в словарь через JSONKit NSDictionary *dict = [[response bodyAsString] objectFromJSONString]; который отлично работает. Но я не могу понять, как преобразовать FileBlob в объект NSData, чтобы я мог записать его как файл на жесткий диск. В случае txt-файла, как в приведенном выше примере, я могу пройти через массив и преобразовать все целочисленные значения в символы

 NSMutableString *fileString = [NSMutableString string]; for (NSNumber *value in [[dict valueForKey:@"FileBlob"] objectAtIndex:0]) { [fileString appendFormat:@"%c", (char)value.integerValue]; } 

а затем сохранить все на диск

 NSData *data = [fileString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *file = [[paths objectAtIndex:0] stringByAppendingPathComponent:filename]; [[NSFileManager defaultManager] createFileAtPath:file contents:data attributes:nil]; 

Но если файл – это что-то вроде PDF, это не сработает. Есть ли что-нибудь, что я могу сделать, чтобы преобразовать File Blob в объект NSData или что-нибудь еще, чтобы записать blob как файл на диск?

Вместо этого используйте NSMutableData :

 NSMutableData *data = [NSMutableData dataWithCapacity:blobs.count]; for (NSNumber *number in blobs) { uint8_t byte = (uint8_t)[number intValue]; [data appendBytes:&byte length:1]; } // write data to file