2013-06-13 4 views
2

Я использую магическую запись с основными данными.сохранить изображения в основные данные с помощью магической записи

В моем приложении у меня есть только одно сущность с некоторыми строковыми атрибутами. Теперь я хотел бы добавить изображение к этому объекту, но я не знаю, как это сделать, используя магическую запись. Я искал, но ничего не нашел в Интернете. В моем приложении все данные вставляются пользователем, а также изображение, камера или библиотека фотографий.

Как сохранить изображения с использованием магической записи и основных данных?

ответ

2

Просто сохраните изображение в папке с документами приложения и сохраните строку с URL-адресом файла в основном объекте данных.

+0

Итак, мой атрибут «фото» - это тип строки? – Totka

+1

Правильно. Вы также можете назвать его «photoFileName» или «photoPath» ... Apple рекомендует хранить только очень маленькие изображения в Core Data, такие как миниатюры, и использовать этот метод для более крупных. – Mundi

+0

Можете ли вы разместить образец кода для этого? – Totka

0

То, что вы пытаетесь сделать выше, можно сделать легко. Лучший совет, который я могу вам дать, - создать новый образец проекта только для сохранения и извлечения изображения из базы данных CoreData. Таким образом вы точно знаете, как работает этот процесс. Если вы попытаетесь внедрить эту функциональность в свой текущий проект, вы можете потерять информацию о том, что происходит где.

Это очень быстрый пример, я буду ожидать импортировать делегаты в вашем .h файлы самостоятельно и т.д.

Сначала инициировать UIImagePicker с помощью кнопки

-(IBAction)pickImage:(id)sender 
{ 
     UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
     imagePicker.delegate = self; 
     [self presentModalViewController:imagePicker animated:YES]; 
} 

После выбора изображения, вы можете отобразить его на кнопку с помощью одного из методов делегата

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo 

    self.imageButton.imageView.image = selectedImage; 

чтобы сохранить его CoreData присвоить UIImage типа на Transformable типа в атрибуте в базе данных, а затем сохранить managedObjectContext

ссылки, чтобы помочь вам:

UIImagePicker Class Reference

Magical Record Docs

CoreData Recipes Sample Project

Надежда эта помощь , удачи!

+0

спасибо !! Теперь у меня есть фото в моем приложении! – Totka

+0

что-то не так с ответом? –

+0

Да, установка атрибута фотографии как трансформируемого замедляет мое приложение. много – Totka

0

Я нашел ответ:

спасти:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString*nomeImmagine = [[NSString alloc] initWithFormat:@"%@", self.fieldName.text]; 
NSString *pngFilePath = [NSString stringWithFormat:@"%@/%@.png",documentsDirectory, nomeImmagine]; 
UIImage *image = self.showSelectedImage.image; // imageView is my image from camera 
NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)]; 
[data1 writeToFile:pngFilePath atomically:NO]; 

нагрузке:

-(void) loadImageFromPathInsideView 
{ 
    // [self loadImageFromPathInsideView]; 
    Ricetta* contact =[[DataManager sharedClass]dammiTuttaLaRicetta:self.indice]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 

    NSString*nomeImmagine = [[NSString alloc] initWithFormat:@"%@", contact.nome2]; 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString* path = [NSString stringWithFormat:@"%@/%@.png",documentsDirectory, nomeImmagine];; 
    UIImage* image = [UIImage imageWithContentsOfFile:path]; 
    self.image.image = image; 
} 
+0

Это именно то, что я предложил в своем ответе. Это код доступа к файлам с открытым кодом. Вам все равно нужно сохранить (относительный) URL-адрес в управляемом объекте. – Mundi

+0

Да, спасибо, что помогли мне разобраться – Totka

+0

Спасибо. Добро пожаловать в SOF. – Mundi

0

слово советы. Сохранение изображений в виде transformable (aka NSImage) типа в основных данных легко, но приводит к общей медленной производительности приложения даже для небольшого числа (более 20), которое варьируется от 50 до 200 кб со средним значением 100 КБ. даже если файлы, связанные через отношения, медленны, учитывая, что один контроллер часто привязан к другому.

приведенный выше способ хранения локального имени пути как NSString, указывающий на папку «Документы», является кучей лучше для общего опыта.

, как говорится, создание эскиза изображения (около 150x150) может быть выгодно, чтобы создать один раз и хранить, что в transienttransformableNSImage, а не загрузки Biggy и делающие на лету изменить размер несколько раз , эта производительность может быть легко прокручена вверх и вниз в таблице, содержащей 50+ уменьшенных изображений.

Смежные вопросы