2012-05-30 6 views
2

Я знаю, что этот вопрос задавали многие люди, и есть несколько дискуссий и аргументов: «Зачем использовать sqlite, использовать FMDB, основные данные» и т. Д. Для хранения или вставки изображений в базу данных. пожалуйста, поймите мою проблему, что я очень привык к sqlite3, и я не могу пойти с основными данными или некоторыми другими db. Также я просто изучаю этапы технологии iphone. Поэтому я прошу предоставить мне решение, которое может быть только с sqlite;)Хранить изображения в базе данных sqlite

Извините, если у вас возникнут какие-либо ошибки в моей просьбе!

У меня есть текстовое поле, в котором будет отображаться таблица с предложениями при вводе буквы, т. Е. из контактов, скажем, если я набираю буквы «L», «Лакшаман Рао, Прасанна Лакшми,« Локеш Шаран »и т. д.

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

NSData *imgData = nil; 
imgData = (NSData *)ABPersonCopyImageData(ref); 
contactImage = [UIImage imageWithData:imgData]; 

Теперь я искал подобного рода вопросы here и there и общий ответ был, чтобы сохранить изображение в каталоге документов в приложении и в db сохраняет только путь изображения.

Как вставить в капли в db сделает наш db очень очень медленным :(

Но как это сделать. Я не могу понять фрагмент кода в ссылках, которые я прошел правильно, как мне преобразовать contactImage, который имеет тип UIImage, NSString, чтобы я мог вставить строку в таблицу базы данных, содержащую запись типа VARCHAR!

EDIT

Это код, предложенный здесь:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"]; 
UIImage *img = [UIImage imageWithContentsOfFile:getImagePath]; 

Это код, который я внедрено:

ABAddressBookRef addressBook = ABAddressBookCreate(); 
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); 

NSString *contactFirstName = nil; 
NSString *contactLastName = nil; 
NSString *fullName = nil; 

    for (int i = 0; i < nPeople; i++) 
    { 
     ref = CFArrayGetValueAtIndex(allPeople, i); 
     contactFirstName = [[[NSString alloc] initWithString:(NSString *)ABRecordCopyValue(ref, kABPersonFirstNameProperty)]autorelease]; 
     contactLastName = [[[NSString alloc] initWithString:(NSString *)ABRecordCopyValue(ref, kABPersonLastNameProperty)]autorelease]; 

     contactLastName = [NSString stringWithFormat:@" %@",contactLastName]; 
     fullName = [contactFirstName stringByAppendingString:contactLastName]; 

     [contactList addObject:fullName]; 
} 

    NSData *imgData = nil; 
    imgData = (NSData *)ABPersonCopyImageData(ref); 
    contactImage = [UIImage imageWithData:imgData]; 

    CFRelease(allPeople); 
    CFRelease(addressBook); 

Пожалуйста, помогите мне, Борясь очень плохо, как бороться и переходите к следующему: (

Спасибо всем заранее :)

+0

Какой фрагмент кода вы не получаете? его очень легко, если вы скопируете код вставки в Xcode и посмотрите ссылку, щелкнув каждый фрагмент кода с правой стороны Xcode. –

+0

@ anonymous См. Отредактированную часть моего сообщения –

+0

Я думаю, что @Hanon предоставил легко понятный ответ .. –

ответ

6

Для сохранения изображения в документах

- (void)saveImage:(UIImage *)image forPerson:(NSString *)fullName { 
    // Make file name first 
    NSString *filename = [fullName stringByAppendingString:@".png"]; // or .jpg 

    // Get the path of the app documents directory 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    // Append the filename and get the full image path 
    NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:filename]; 

    // Now convert the image to PNG/JPEG and write it to the image path 
    NSData *imageData = UIImagePNGRepresentation(image); 
    [imageData writeToFile:savedImagePath atomically:NO]; 

    // Here you save the savedImagePath to your DB 
    ... 
} 

Таким образом, вы позже можете получить изображение на

- (UIImage *)loadImage:(NSString *)filePath { 
    return [UIImage imageWithContentsOfFile:filePath]; 
} 
+0

Спасибо Mr.Hanon за ответ, будет реализовывать и возвращаться к вам –

+0

Одно небольшое сомнение, г-н Ханон, мое имя изображения - contactImage, т.е. полученное изображение из контакта, так будет ли эта строка UIImagePNGRпредпечататься (изображение), а также то, что это имя файла, мы не присвоили никакого значения na –

+0

. Посмотрите мой код, как я получаю контактное изображение –

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