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);
}
感謝。歡呼聲
你好韋恩,非常感謝你的回覆。我遵循你的指令,並將其添加到我的代碼中: 'Bild * pic = [NSEntityDescription insertNewObjectForEntityForName:@「Bild」 inManagedObjectContext:self.managedObjectContext]; pic.vorschauData = _vorschauImageView.image ' 現在應用程序崩潰,我從日誌此錯誤: ***終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,理由是:「不能接受類型的屬性值: property =「vorschauData」;所需的類型= NSData;給定類型= UIImage;「 –
所以你需要將圖像轉換爲數據(JPEG或PNG),有這些功能,或者使屬性可以轉換而不是數據 – Wain
謝謝你的回覆。 'pic.vorschauData = UIImagePNGRepresentation(_vorschauImageView.image);' 我會檢查我的CoreData是否包含所要求的數據,現在請提前感謝您的幫助:3請注意,我無法向您提供任何評論由於低代表 –