我在第三个选项卡中有一个带有 UIScrollViewController 的 tabBarControllerView。我在 viewDidLoad 和 viewWillAppear 中加载基本相同的东西,来自核心数据的图片。我在想 viewWillAppear 是我可以用来更新 UIScrollView 中的视图。唯一的事情是当我将图片添加到核心数据时,没有显示正确的图片。
我想知道这是我的 viewWillAppear 逻辑还是我的上下文关闭了?我正在修复我的上下文,所以如果我的逻辑是合理的(减去 ManagedObjectContext),那将是很好听的 - 因为我可以回去处理上下文问题。
如果这是逻辑,那么如果您能指出我的缺陷,我将不胜感激:-)
头文件
#import <UIKit/UIKit.h>
#import "PhotoViewController.h"
@interface MyTabBarViewController : UIViewController<UIScrollViewDelegate>
{
IBOutlet UIPageControl *pageControl;
IBOutlet UIScrollView *scroller;
UIImage *image;
CGFloat scrollWidth;
int pageNumber;
}
@property (nonatomic,retain)IBOutlet UIPageControl *pageControl;
@property (nonatomic,retain)IBOutlet UIScrollView *scroller;
-(IBAction)clickPageControl:(id)sender;
@end
实现文件...相关片段
- (void)viewDidLoad
{
[super viewDidLoad];
scroller.delegate=self;
scroller.pagingEnabled=YES;
scroller.directionalLockEnabled=YES;
scroller.showsHorizontalScrollIndicator=NO;
scroller.showsVerticalScrollIndicator=NO;
scroller.contentSize=CGSizeMake(pageControl.numberOfPages*scroller.frame.size.width, scroller.frame.size.height);
scrollWidth = 0;
pageNumber = 0;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSManagedObjectContext *context = [(CoreDataProjAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
request.entity = [NSEntityDescription entityForName:@"Photo" inManagedObjectContext:context];
NSError *error = nil;
NSArray *fetchCount = [context executeFetchRequest:request error:&error];
int pageCount = [fetchCount count];
for (int i=pageNumber; i<pageCount; i++)
{
PhotoViewController *pvc = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:nil];
CGRect rect = scroller.frame;
rect.size.height = scroller.frame.size.height;
rect.size.width = scroller.frame.size.width;
rect.origin.x = scroller.frame.origin.x + scrollWidth;
rect.origin.y = scroller.frame.origin.y;
pvc.view.frame = rect;
[pvc view];
pvc.label.text = [NSString stringWithFormat:@"%d", pageNumber];
pvc.label.textColor = [UIColor redColor];
Photo *photo = [[Photo alloc] init];
photo = [fetchCount objectAtIndex:i];
UIImage *fetchedImage = [UIImage imageWithData:photo.photo];
pvc.imageView.image = fetchedImage;
[scroller addSubview:pvc.view];
[pvc release];
pageNumber++;
scrollWidth += scroller.frame.size.width;
}
pageControl.numberOfPages=pageCount;
pageControl.currentPage=0;
[self.view addSubview:scroller];
[request release];
}
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
scroller.delegate=self;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSManagedObjectContext *context = [(CoreDataProjAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
request.entity = [NSEntityDescription entityForName:@"Photo" inManagedObjectContext:context];
NSError *error = nil;
NSArray *fetchCount = [context executeFetchRequest:request error:&error];
int pageCount = [fetchCount count];
scroller.contentSize=CGSizeMake(pageCount*scroller.frame.size.width, scroller.frame.size.height);
for (int i=pageNumber; i<pageCount; i++)
{
PhotoViewController *pvc = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:nil];
CGRect rect = scroller.frame;
rect.size.height = scroller.frame.size.height;
rect.size.width = scroller.frame.size.width;
rect.origin.x = scroller.frame.origin.x + scrollWidth;
rect.origin.y = scroller.frame.origin.y;
pvc.view.frame = rect;
[pvc view];
pvc.label.text = [NSString stringWithFormat:@"%d", pageNumber];
pvc.label.textColor = [UIColor redColor];
Photo *photo = [[Photo alloc] init];
photo = [fetchCount objectAtIndex:i];
UIImage *fetchedImage = [UIImage imageWithData:photo.photo];
pvc.imageView.image = fetchedImage;
[scroller addSubview:pvc.view];
[pvc release];
pageNumber++;
scrollWidth += scroller.frame.size.width;
}
pageControl.numberOfPages=pageCount;
pageControl.currentPage=0;
[self.view addSubview:scroller];
[request release];
}