Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Запись объекта NSData в файл Objective-C

0

Объект NSData представляет данные. Например, при загрузке данных по URL-aдpecy вы получаете экземпляр NSData, которому можно приказать записать себя в файл. Создайте новую программу командной строки Foundation с именем ImageFetch; эта программа будет загружать изображение с сайта Google в экземпляр NSData. Затем прикажите NSData записать свой буфер данных в файл:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])

{

@autoreleasepool {

NSURL *url = [NSURL URLWithString:

@"http://www.google.com/images/logos/ps_logo2.png"]; NSURLRequest *request = [NSURLRequest requestWithURL:url];

NSError *error = nil;

NSData *data = [NSURLConnection sendSynchronousRequest:request

returningResponse:NULL

error:&error];

if (!data) {

NSLog(@"fetch failed: %@", [error localizedDescription]); return 1;

}

NSLog(@"The file is %lu bytes", [data length]); BOOL written = [data writeToFile:@"/tmp/google.png"

options:0 error:&error];

if (!written) {

NSLog(@"write failed: %@", [error localizedDescription]); return 1;

}

NSLog(@"Success!");

}

return 0;

}

Постройте и запустите программу откройте созданный графический файл в

Preview.

Метод writeToFile:options:error: получает число, обозначающее настройки процесса сохранения. Чаще всего используется значение NSDataWritingAtomic. Допустим, изображение уже было загружено, а сейчас вы загружаете его заново и заменяете новой версией. Во время записи нового изображения внезапно отключается питание. Наполовину записанный файл бесполезен. В тех случаях, когда наполовину записанный файл хуже, чем никакого, можно объявить операцию атомарной. Добавьте соответствующий параметр:

NSLog(@"The file is %lu bytes", [data length]);

BOOL written = [data writeToFile:@"/tmp/google.png" options:NSDataWritingAtomic

error:&error];

if (!written) {

NSLog(@"write failed: %@", [error localizedDescription]); return 1;

}

Данные записываются во временный файл, которому после завершения записи присваивается правильное имя. Таким образом вы получаете либо весь файл, либо ничего.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии