2014-01-19 43 views
1

我正在創建一個學生索引應用程序,您可以在其中保存學生的姓名,照片和角色。一切正常,但我的代碼不會保存我的核心數據模型中的圖像。我一直試圖弄清楚整天。無法保存核心數據中的圖像

你可以在這裏找到我的整個項目:提前烏拉圭回合的幫助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); 
} 

感謝。歡呼聲

回答

1

通常,您不應該將圖像保存在覈心數據中。請將其保存在磁盤上的文件中,並將路徑保存到Core Data模型中的文件中。

這條線:

student.bild.vorschauData = _vorschauImageView.image; 

使得它看起來像student有關係(bild)到包含圖像一些其它物體。您需要創建該對象,然後將其插入上下文中,並將其與student關聯,然後才能使用它。

+0

你好韋恩,非常感謝你的回覆。我遵循你的指令,並將其添加到我的代碼中: 'Bild * pic = [NSEntityDescription insertNewObjectForEntityForName:@「Bild」 inManagedObjectContext:self.managedObjectContext]; pic.vorschauData = _vorschauImageView.image ' 現在應用程序崩潰,我從日誌此錯誤: ***終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,理由是:「不能接受類型的屬性值: property =「vorschauData」;所需的類型= NSData;給定類型= UIImage;「 –

+0

所以你需要將圖像轉換爲數據(JPEG或PNG),有這些功能,或者使屬性可以轉換而不是數據 – Wain

+0

謝謝你的回覆。 'pic.vorschauData = UIImagePNGRepresentation(_vorschauImageView.image);' 我會檢查我的CoreData是否包含所要求的數據,現在請提前感謝您的幫助:3請注意,我無法向您提供任何評論由於低代表 –