Reputation: 305
I have saved my image and text into the sqlite3 database by clicking saveInfo button.
- (IBAction)saveInfo:(id)sender {
// Prepare the query string.
NSString *query;
if (self.recordIDToEdit == -1) {
query = [NSString stringWithFormat:@"insert into empInfo values('%@', '%@','%@','%@','%@','%@' )", self.txtEmpCode.text, self.txtName.text, self.txtDesignation.text,self.txtDepartment.text,self.txtTagline.text,self.saveImage.image];
}
else{
query = [NSString stringWithFormat:@"update empInfo set name='%@',empInfoCode='%@',designation='%@',department='%@',tagLine='%@',photo='%@' where empInfoCode=%d", self.txtEmpCode.text,self.txtName.text, self.txtDesignation.text,self.txtTagline.text,self.txtDepartment.text,self.saveImage.image, self.recordIDToEdit];
}
// Execute the query.--------------
[self.dbManager executeQuery:query];
// If the query is sucessfull the show this in the dubugger.
if (self.dbManager.affectedRows != 0) {
NSLog(@"Query was executed successfully. Affected rows = %d", self.dbManager.affectedRows);
// Here we inform the delegate that editing in app is finished.
[self.delegate editingInfoWasFinished];
// Pop the view controller.
[self.navigationController popViewControllerAnimated:YES];
}
else{
NSLog(@"%d",self.dbManager.affectedRows);
NSLog(@"---Could not execute the query.----");
}
}
Then I load the data in this method, I'm able to access the text data but can't load the image in this method.
-(void)loadInfoToEdit{
// Create the query.
NSString *query = [NSString stringWithFormat:@"select * from empInfo where empInfoCode=%d", self.recordIDToEdit];
// Load the relevant data.
NSArray *results = [[NSArray alloc] initWithArray:[self.dbManager loadDataFromDB:query]];
// Setting the loaded data to the textfields and imageView.
.
self.txtEmpCode.text = [[results objectAtIndex:0] objectAtIndex:[self.dbManager.arrColumnNames indexOfObject:@"empInfoCode"]];
self.txtName.text = [[results objectAtIndex:0] objectAtIndex:[self.dbManager.arrColumnNames indexOfObject:@"name"]];
self.txtDesignation.text = [[results objectAtIndex:0] objectAtIndex:[self.dbManager.arrColumnNames indexOfObject:@"designation"]];
self.txtTagline.text = [[results objectAtIndex:0] objectAtIndex:[self.dbManager.arrColumnNames indexOfObject:@"tagLine"]];
self.txtDepartment.text = [[results objectAtIndex:0] objectAtIndex:[self.dbManager.arrColumnNames indexOfObject:@"department"]];
self.saveImage.image = [[results objectAtIndex:0] objectAtIndex:[self.dbManager.arrColumnNames indexOfObject:@"photo"]];
// NSLog(@"This photo has:%@",[[results objectAtIndex:0]objectAtIndex:[self.dbManager.arrColumnNames indexOfObject:@"photo"]]);
// self.saveImage.image= [[results objectAtIndex:0]objectAtIndex:[self.dbManager.arrColumnNames indexOfObject:@"photo"]];
// NSLog(@"This Nsdata object has %@",img);
// self.saveImage.image = [UIImage imageWithData:img];
}
How can I load my image into saveImage(UIImageView property)?
Upvotes: 3
Views: 372
Reputation: 27428
You should save your image in your document directory. For that you should first convert image to data and then you should save(or write) that data to documentdirectory
. and you should save name of image to your sqlite database
Now, when you fetch data from your database, you will got imagename, by that imagename
you can fetch your saved image data from document directory
and you can convert that data to image and can use as per requirement.
Example :
save image,
NSString *docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSString *profilePicturePath = [docsDir stringByAppendingPathComponent:@"profilePicture"];
NSData *data = UIImageJPEGRepresentation(yourImage, 1.0);
[data writeToFile:profilePicturePath atomically:NO];
You can retrieve image like,
UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfFile:profilePicturePath]];
Upvotes: 3
Reputation: 2693
You can't save image simply like saving string data. You will have to convert image into NSData and then save it using
sqlite3_bind_blob(statement, 2, [imgData bytes], [imgData length], SQLITE_TRANSIENT);
For more info please see this;
Upvotes: 0