2014-03-05 30 views
0

在我的應用程序中,只有2個視圖。第一個視圖是一個集合視圖,當您點擊一個圖像時,它會轉到MWPhotoBrowser以查看全尺寸的圖像。從集合視圖中選擇MWPhotoBrowser時未顯示正確圖像

我在互聯網上檢索~100張圖片,並將它們添加到NSMutableArray。 這有一個問題。當我第一次運行的應用並從網格中選擇縮略圖時,它會顯示最後一張圖像。不是我選擇的那個。請注意,我第一次強調,因爲它只發生在第一次。如果我返回並點擊另一張圖像,它會正確顯示所選圖像。下面是它的假設工作的截圖。

enter image description here

下面是代碼

#import "UIImageView+WebCache.h" 
#import "ViewController.h" 
#import "MWPhotoBrowser.h" 
#import "Image.h" 
#import "ImageCell.h" 

@interface ViewController() <UICollectionViewDelegate, UICollectionViewDataSource, MWPhotoBrowserDelegate> 

@property (strong, nonatomic) NSMutableArray *images; 
@property (strong, nonatomic) NSMutableArray *browserImages; 
@property (strong, nonatomic) MWPhotoBrowser *browser; 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.browser = [[MWPhotoBrowser alloc] initWithDelegate:self]; 
    self.browser.displayActionButton = YES; 
    self.browser.displayNavArrows = YES; 
    self.browser.displaySelectionButtons = NO; 
    self.browser.zoomPhotosToFill = YES; 
    self.browser.alwaysShowControls = YES; 
    self.browser.enableGrid = NO; 
    self.browser.startOnGrid = NO; 
    self.browser.wantsFullScreenLayout = NO; 

    [self.browser showNextPhotoAnimated:YES]; 
    [self.browser showPreviousPhotoAnimated:YES]; 

    [self loadImages]; 
} 

- (void)loadImages 
{ 
    self.images = [[NSMutableArray alloc] init]; 
    self.browserImages = [[NSMutableArray alloc] init]; 

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", HOST_URL, @"All_Images.php"]]; 
    NSData *jsonResults = [NSData dataWithContentsOfURL:url]; 
    NSDictionary *results = [NSJSONSerialization JSONObjectWithData:jsonResults options:0 error:NULL]; 

    NSDictionary *images = results[@"Images"]; 
    for (NSDictionary *img in images) { 
     Image *imageObj = [[Image alloc] init]; 
     imageObj.imageId = [img objectForKey:@"id"]; 
     imageObj.imageName = [img objectForKey:@"name"]; 

     // Get the full image path 
     NSString *fullImagePath = [NSString stringWithFormat:@"%@%@", HOST_URL, [img objectForKey:@"full_image"]]; 
     imageObj.imagePath = fullImagePath; 

     // Get the thumbnail image path depending on the device 
     NSString *thumbnailPath; 
     if (DEVICE_IS_PAD) { 
      thumbnailPath = [NSString stringWithFormat:@"%@%@", HOST_URL, [img objectForKey:@"thumbnail_ipad"]]; 
     } else { 
      thumbnailPath = [NSString stringWithFormat:@"%@%@", HOST_URL, [img objectForKey:@"thumbnail_iphone"]]; 
     } 
     imageObj.imageThumbnail = thumbnailPath; 

     // Creates an object for each image and fill it with the retrieved info 
     [self.images addObject:imageObj]; 

     // This array stores the image paths for later use (displaying them in a photo browser) 
     MWPhoto *browserImage = [MWPhoto photoWithURL:[NSURL URLWithString:imageObj.imagePath]]; 
     browserImage.caption = imageObj.imageName; 
     [self.browserImages addObject:browserImage]; 
    } 
    [self.collectionView reloadData]; 
} 

#pragma mark - MWPhotoBrowserDelegate 
- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser 
{ 
    return self.browserImages.count; 
} 

- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index 
{ 
    if (index < self.browserImages.count) { 
     return self.browserImages[index]; 
    } 
    return nil; 
} 

#pragma mark - UICollectionViewDataSource 
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    return self.images.count; 
} 

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    return 1; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"ImageCell"; 
    ImageCell *cell = (ImageCell *)[collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; 

    Image *image = self.images[indexPath.row]; 
    [cell.imageView setImageWithURL:[NSURL URLWithString:image.imageThumbnail] placeholderImage:[UIImage imageNamed:@"placeholder"]]; 

    return cell; 
} 

#pragma mark - UICollectionViewDelegate 
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Opens the image browser 
    [self.browser setCurrentPhotoIndex:indexPath.row]; 
    [self.navigationController pushViewController:self.browser animated:YES]; 
} 

@end 

我無法找出爲什麼它顯示網格的最後一個圖像,我第一次選擇一個圖像。我已經上傳了一個包含該問題的演示項目,以便您快速查看它。 https://www.dropbox.com/s/tp6a67f83l0rzin/PhotoBrowserTest.zip

我真的很感謝任何人的幫助來解決這個問題。

謝謝。

回答

2

變化項目中的這些方法

- (NSUInteger)numberOfPhotos { 
    if (_photoCount == NSNotFound || _photoCount == 0) { 
     if ([_delegate respondsToSelector:@selector(numberOfPhotosInPhotoBrowser:)]) { 
      _photoCount = [_delegate numberOfPhotosInPhotoBrowser:self]; 
     } else if (_depreciatedPhotoData) { 
     _photoCount = _depreciatedPhotoData.count; 
     } 
    } 
    if (_photoCount == NSNotFound) _photoCount = 0; 
    return _photoCount; 
} 

- (id)initWithDelegate:(id <MWPhotoBrowserDelegate>)delegate { 
    if ((self = [self init])) { 
     _delegate = delegate; 
     [self setCurrentPhotoIndex:0]; 
    } 
    return self; 
} 

你需要檢查,如果你的_photoCount == 0,因爲你鴕鳥政策第一次有這樣的信息和_photoCount會爲0,但第二次您的numberOfPhotosInPhotoBrowser將是正確的

+0

謝謝!它工作正常。我也注意到了,但我認爲這個錯誤是在我自己的代碼中。無論如何,感謝一噸! – Isuru