除了將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對象時遇到問題嗎?或者,您是否無法創建從父到圖的多對多關係?抽象地說,這是兩個無關的問題。另外,你是否繼承NSManagedObject並創建父類和圖像類? – westsider 2010-11-24 17:35:15