2012-05-30 185 views
2

我知道這個問題被很多人問及,有關「爲什麼要使用sqlite,使用FMDB,核心數據等等」的討論和爭論等等來存儲或插入圖像到數據庫中。但請理解我的問題,我非常習慣sqlite3,我無法使用核心數據或其他數據庫。另外我只是在學習iphone技術階段。所以我請求提供給我一個解決方案,可以是處理sqlite只);將圖像存儲到sqlite數據庫

道歉,如果在我的請求有任何錯誤!

我有一個文本字段,它會在輸入字母時顯示帶有建議的表格,從聯繫人,說如果我鍵入字母「L」,「Lakshaman饒,Prasanna Lakshmi,」Lokesh Sharan「等。

現在我試圖從各自的聯繫人獲得相應的聯繫人圖片。所以我已經搜索如何檢索聯繫人的圖像和代碼示例實現方式如下:

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

現在我已經尋找類似這類問題herethere和常見的答案是保存在應用程序的文件目錄和圖像該數據庫僅保存圖像的路徑

由於在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); 

請幫我,就如何應對掙扎得很厲害並繼續前進:(

感謝所有提前:)

+0

哪個代碼段你沒有得到的形象呢?如果您在Xcode中複製粘貼代碼,並通過單擊Xco​​de右側的每個代碼塊來查找引用,它非常簡單。 –

+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

感謝哈龍先生的回答,將執行並取回給你 –

+0

一個小小的懷疑哈龍先生,我的形象名字是contactImage,即從聯繫人中檢索到的圖像,所以將這行UIImagePNGRepresentation(圖像)的工作,也是什麼文件名,我們還沒有分配任何價值na –

+0

請看我的代碼,我如何獲取聯繫人圖片 –

相關問題