Кроме преобразования UIImage
в NSData
и обратно нет ничего особенного, если у вас есть много отношений с UIImage
. Таким образом, любой основной учебник по данным, который включает отношения «многие», должен быть достаточным. Если вам нужен пример кода, вы можете проверить Apple iPhoneCoreDataRecipes.
Несколько указателей, которые помогут вам начать работу. Давайте представим, что у нас есть PersonViewController
, который наследует от `UITableViewController», который получает называется что-то вроде:
PersonViewController *personViewController = [[[PersonViewController alloc] init] autorelease];
personViewController.person = ... // get the selected person
personViewController.managedObjectContext = self.managedObjectContext;
[self.navigationController pushViewController:personViewController animated:YES];
PersonViewController обладает следующими свойствами:
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) Person *person;
@property (nonatomic, copy) NSArray *images;
Существует кнопка, которая будет обуты сборщика изображения добавить
- (void)insertNewObject {
UIImagePickerController *imagePicker = [[[UIImagePickerController alloc] init] autorelease];
imagePicker.delegate = self;
[self presentModalViewController:imagePicker animated:YES];
}
Затем в обратном вызове imagePickerController:didFinishPickingMediaWithInfo:
мы можем:
// Get the image from the picker
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
// Transform the image to NSData
ImageToDataTransformer *transformer = [[[ImageToDataTransformer alloc] init] autorelease];
NSData *imageData = [transformer transformedValue:image];
// Create a new PersonImage entity and assign the image data
PersonImage *personImage = [NSEntityDescription insertNewObjectForEntityForName:@"PersonImage" inManagedObjectContext:self.managedObjectContext];
personImage.imageData = imageData;
// This is where we are adding the image to our person
[self.person addImagesObject:personImage];
// Core data save, however you want to do it.
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
abort();
}
// simple trick to update the table view data source
self.images = nil;
[self.tableView reloadData];
// don't forget to dismiss the picker
[self dismissModalViewControllerAnimated:YES];
Реализация images
просто держать его простые методы источника данных
- (NSArray *)images {
if (images_) {
return images_;
}
// since we set self.images = nil when adding a new image we will get the list
// of all images from our person object.
images_ = [[self.person.images allObjects] retain];
return images_;
}
В таблице будет просто:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.images.count;
}
и однако создается ячейка не имеет никакого значения , В то, если мы хотим что-то делать с изображениями, мы можем сделать что-то в tableView:didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// get the tapped person image
PersonImage *personImage = [self.images objectAtIndex:indexPath.row];
// get the image
ImageToDataTransformer *transformer = [[[ImageToDataTransformer alloc] init] autorelease];
UImage *image = [transformer reverseTransformedValue:personImage.imageData];
// do something with the image.
}
Я не уверен, в чем вопрос. У вас возникли проблемы с кодировкой объектов UIImage для объектов NSData? Или у вас возникли проблемы с созданием многих отношений от Parent to Image? В реферате это две несвязанные проблемы. Кроме того, вы подклассифицируете NSManagedObject и создаете классы Parent и Image? – westsider