当Homepwner需要显示BNRDetailViewController对象的视图时(见图11-11),该对象需要通过当前选中的BNRItem对象的itemKey属性,从BNRImageStore对象得到相应的照片,然后将该照片放置在UIImageView对象上。
图11-11 缓存
Homepwner会在两种情况下显示BNRDetailViewController对象的视图:①当用户选中BNRItemsViewController对象的UITableView对象的某行时。②当用户关闭UIImagePickerController对象时。无论哪种情况,BNRDetailViewController对象都应该在UIImageView对象上显示当前选中的BNRItem对象的照片。将以下代码加入BNRDetailViewController.m中的viewWillAppear:。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.nameField.text = item.itemName;
self.serialNumberField.text = item.serialNumber;
self.valueField.text = [NSString stringWithFormat:@“%d”,
item.valueInDollars];
static NSDateFormatter *dateFormatter = nil;
if (!dateFormatter) {
dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateStyle = NSDateFormatterMediumStyle;
dateFormatter.timeStyle = NSDateFormatterNoStyle;
}
self.dateLabel.text = [dateFormatter stringFromDate:item.dateCreated];
NSString *itemKey = self.item.itemKey;
// 根据itemKey,从BNRImageStore对象获取照片
UIImage *imageToDisplay =
[[BNRImageStore sharedStore] imageForKey:itemKey];
// 将得到的照片赋给UIImageView对象
self.imageView.image = imageToDisplay;
}
如果针对指定的键,BNRImageStore对象没有包含相应的照片(或者选中的BNRItem对象的itemKey属性是nil),那么UIImageView对象的对象变量image的值会是nil。当image属性是nil时,UIImageView对象不会有任何显示。
构建并运行应用,添加一个新的BNRItem对象,然后进入其详细界面。点击工具栏上的相机按钮,为该对象拍摄一张照片,Homepwner应该能正确地显示拍摄的照片。