所以我正在做的是用戶從相機膠捲中選擇一個圖像,我設置了一個imageView與該圖像。到現在爲止還挺好。現在我需要將此圖像保存到我的數據庫中。因此,當下次加載視圖時,我再次選擇了該圖像。問題是我的圖像視圖沒有與圖像設置。可能是因爲它沒有正確保存到我的數據庫。從我讀NSData
是最好使用和它正在使用,但沒有成功。有人可以幫助解決我的問題嗎?將圖像從UIImagePicker保存到Sqlite數據庫
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
[self dismissViewControllerAnimated:YES completion:nil];
fsImageView.image = [info objectForKey:UIImagePickerControllerOriginalImage];
fsUIImage = [info objectForKey:UIImagePickerControllerOriginalImage];
imgData = UIImagePNGRepresentation(fsUIImage);
[self saveImageToDatabase];
}
------我在這裏我的圖像保存到數據庫-------
-(void)saveImageToDatabase{
[self openDB];
sqlite3_stmt *newstatement;
int originalTotalCount = sqlite3_total_changes(db);
NSString *sql = [NSString stringWithFormat:@"UPDATE Annotation SET image = '%@' WHERE title ='%@'", imgData, fsTitleName];
if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &newstatement, nil) != SQLITE_OK) {
NSLog(@"%s: prepare failed: %s", __FUNCTION__, sqlite3_errmsg(db));
} else {
if (sqlite3_step(newstatement) != SQLITE_DONE) {
NSLog(@"%s: step failed: %s", __FUNCTION__, sqlite3_errmsg(db));
} else {
int rowsUpdated = sqlite3_total_changes(db) - originalTotalCount;
NSString *message;
if (rowsUpdated == 1)
message = @"Updated one row";
else if (rowsUpdated == 0)
message = @"No rows updated";
else
message = [NSString stringWithFormat:@"Updated %d rows", rowsUpdated];
NSLog(@"%@", message);
sqlite3_step(newstatement);
}
sqlite3_finalize(newstatement);
}
sqlite3_close(db);
}
------在這裏,我拉我的形象從DB- ------被調用時viewLoads ..
-(void)setImage{
[self openDB];
NSString *sql = [NSString stringWithFormat:@"SELECT image FROM Annotation WHERE title = '%@'",fsTitleName];
sqlite3_stmt *statement;
if(sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK){
int rc;
if ((rc = sqlite3_step(statement)) == SQLITE_ROW) {
char *field1 = (char *) sqlite3_column_text(statement, 0);
NSString *field1Str = [[NSString alloc]initWithUTF8String:field1];
imgData = [field1Str dataUsingEncoding:NSUTF8StringEncoding];
[fsImageView setImage:[UIImage imageWithData: imgData]];
} else if (rc != SQLITE_DONE) {
NSLog(@"%s: sqlite3_step failed: %s", __FUNCTION__, sqlite3_errmsg(db));
}
} else {
NSLog(@"%s: sqlite3_prepare_v2 failed: %s", __FUNCTION__, sqlite3_errmsg(db));
}
sqlite3_finalize(statement);
sqlite3_close(db);
}
檢查此問題:http://stackoverflow.com/questions/3319791/inserting-nsdata-into-sqlite-on-the-iphone而且我也同意,最好將圖像保存到磁盤(如在文檔目錄),並且只有數據庫中文件的路徑(如果需要的話)。 –