Я создаю приложение индекса ученика, в котором вы можете сохранять имена, изображения и роли учащихся. Все работает отлично, но мой код не сохраняет изображения в моей базовой модели данных. Я пытался разобраться в этом весь день.Невозможно сохранить изображения в Core Data
Вы можете найти весь мой проект здесь: http://www21.zippyshare.com/v/26184330/file.html
#import "AddStudent.h"
#import "Studenten.h"
#import "Bild.h"
#import <QuartzCore/QuartzCore.h>
@interface AddStudent() <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@end
@implementation AddStudent;
@synthesize delegate;
@synthesize managedObjectContext = _managedObjectContext;
@synthesize selectedBetreuungsgrund;
@synthesize studentBetrGrundCell = _studentBetrGrundCell;
@synthesize vorschauImageView = _vorschauImageView;
- (void)viewWillAppear:(BOOL)animated {
_studentBetrGrundCell.textLabel.text = @"";
_studentBetrGrundCell.delegate = self;
_studentBetrGrundCell.managedObjectContext = self.managedObjectContext;
}
- (void)betrGrundWasSelectedOnPicker:(Betreuungsgrund *)betreuungsgrund {
self.selectedBetreuungsgrund = betreuungsgrund;
_studentBetrGrundCell.textLabel.text = self.selectedBetreuungsgrund.name;
}
- (void)viewDidUnload
{
[super viewDidUnload];
}
- (void)dismissKeyboard {
[self.view endEditing:TRUE];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.studentNachnameTextfeld.delegate = self;
self.studentVornameTextFeld.delegate = self;
_studentNachnameTextfeld.autocapitalizationType = UITextAutocapitalizationTypeSentences;
_studentVornameTextFeld.autocapitalizationType = UITextAutocapitalizationTypeSentences;
UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[tgr setCancelsTouchesInView:NO];
[self.tableView addGestureRecognizer:tgr];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
- (IBAction)save:(id)sender
{
if (([_studentNachnameTextfeld.text isEqualToString:(@"")])||([_studentVornameTextFeld.text isEqualToString:(@"")])){
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"Sie müssen alle Namensfelder ausfüllen!" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
}
else {
Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student"
inManagedObjectContext:self.managedObjectContext];
student.vorname = _studentVornameTextFeld.text;
student.name = _studentNachnameTextfeld.text;
student.hatBetrGrund = selectedBetreuungsgrund; //Funzt trotzdem
student.bild.vorschauData = _vorschauImageView.image;
NSLog(@"Image Core Data: %@", _vorschauImageView.image);
NSLog(@"Image Core Data DB: %@", student.bild.vorschauData);
// NSLog(@"Betreuungsgrund: %@", student.hatBetrGrund);
[self.managedObjectContext save:nil]; // Eintrag in Datenbank
[self.delegate AddStudentSavePressed:self];
NSLog (@"Save Button bei AddBetrGrund pressed");
}
}
- (IBAction)albumButtonPressed:(id)sender
{
if (! [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:@"Es steht kein Album zur Verfügung!" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
return;
}
UIImagePickerController *controller = [[UIImagePickerController alloc] init];
controller.delegate = self;
controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:controller animated:YES completion:nil];
}
- (IBAction)kameraButtonPressed:(id)sender
{
if (! [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:@"Es steht keine Kamera zur Verfügung!" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
return;
}
UIImagePickerController *controller = [[UIImagePickerController alloc] init];
controller.delegate = self;
controller.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:controller animated:YES completion:nil];
}
- (IBAction)deleteBildPressed:(id)sender {
self.vorschauImageView.image = nil;
}
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
[picker dismissViewControllerAnimated:YES completion:nil];
_vorschauImageView.image = image;
_vorschauImageView.layer.cornerRadius = 10; // abgerundete Ecken
NSLog(@"Image Vorschau: %@", _vorschauImageView.image);
}
Заранее спасибо за помощь ур. Cheers
Hello Wain, большое спасибо за ур ответ. Я выполнил инструкцию ur и добавил это к моему коду: 'Bild * pic = [NSEntityDescription insertNewObjectForEntityForName: @" Bild " inManagedObjectContext: self.managedObjectContext]; pic.vorschauData = _vorschauImageView.image ' Теперь сбои приложений, и я получаю эту ошибку из журнала: ***, истекающее приложение из-за неперехваченное исключение«NSInvalidArgumentException», причина:«Недопустимый типа значения для атрибута: property = "vorschauData"; желаемый тип = NSData; данный тип = UIImage; " –
Итак, вам нужно преобразовать изображение в данные (JPEG или PNG). Для этого есть функции. Или сделайте атрибут трансформируемым вместо данных. – Wain
Благодарим вас за ур. Я просто добавил эту строку: 'pic.vorschauData = UIImagePNGRпредставление (_vorschauImageView.image);' Я проверю, содержит ли моя CoreData запрошенные данные. Спасибо заранее за помощь ур: 3 Пожалуйста, имейте в виду, что я не могу выдвигать какие-либо комментарии ур из-за низкой репутации –