2014-01-19 4 views
1

Я создаю приложение индекса ученика, в котором вы можете сохранять имена, изображения и роли учащихся. Все работает отлично, но мой код не сохраняет изображения в моей базовой модели данных. Я пытался разобраться в этом весь день.Невозможно сохранить изображения в 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

ответ

1

Как правило, вы не должны сохранять изображение в Core Data. Вместо этого сохраните его в файле на диске и сохраните путь к файлу в модели Core Data.

Эта линия:

student.bild.vorschauData = _vorschauImageView.image; 

делает его выглядеть student имеет отношения (bild) в какой-либо другой объект, который содержит изображение. Вам нужно создать этот объект, вставить его в контекст и связать с ним student, прежде чем вы сможете его использовать.

+0

Hello Wain, большое спасибо за ур ответ. Я выполнил инструкцию ur и добавил это к моему коду: 'Bild * pic = [NSEntityDescription insertNewObjectForEntityForName: @" Bild " inManagedObjectContext: self.managedObjectContext]; pic.vorschauData = _vorschauImageView.image ' Теперь сбои приложений, и я получаю эту ошибку из журнала: ***, истекающее приложение из-за неперехваченное исключение«NSInvalidArgumentException», причина:«Недопустимый типа значения для атрибута: property = "vorschauData"; желаемый тип = NSData; данный тип = UIImage; " –

+0

Итак, вам нужно преобразовать изображение в данные (JPEG или PNG). Для этого есть функции. Или сделайте атрибут трансформируемым вместо данных. – Wain

+0

Благодарим вас за ур. Я просто добавил эту строку: 'pic.vorschauData = UIImagePNGRпредставление (_vorschauImageView.image);' Я проверю, содержит ли моя CoreData запрошенные данные. Спасибо заранее за помощь ур: 3 Пожалуйста, имейте в виду, что я не могу выдвигать какие-либо комментарии ур из-за низкой репутации –

Смежные вопросы