我知道很多人都问过这个问题,关于“为什么使用 sqlite、使用 FMDB、核心数据”等有几个讨论和争论。在数据库中存储或插入图像。但请理解我的问题,我很非常习惯于 sqlite3,我无法使用核心数据或其他一些数据库。另外我正处于 iphone 技术的学习阶段。所以我请求提供一个只能处理 sqlite 的解决方案;)
抱歉,如果我的要求有任何错误!
我有一个文本字段,当输入字母(即来自联系人)时,我会显示带有建议的表格,比如我输入字母“L”、“Lakshaman Rao、Prasanna Lakshmi”、“Lokesh Sharan”等。
现在我正在尝试从各个联系人中获取相应的联系人图片。因此,我搜索了有关如何检索联系人图像的代码示例并实现了以下方式:
NSData *imgData = nil;
imgData = (NSData *)ABPersonCopyImageData(ref);
contactImage = [UIImage imageWithData:imgData];
现在我在这里和那里搜索了类似的问题,常见的答案是将图像保存在应用程序的文档目录中,而在数据库中只保存图像的路径。
因为在数据库中插入 blob 会使我们的数据库非常慢:(
但是我该怎么做。我无法正确理解链接中的代码片段,如何将 UIImage 类型的 contactImage 转换为 NSString 以便我可以将字符串插入到数据库表中记录为 VARCHAR 类型!
编辑
这是那里建议的代码:
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);
请帮帮我,在如何处理和继续处理这个问题上苦苦挣扎:(
提前谢谢大家:)