2016-04-17 8 views
0

Я работаю над проектом IOS, где мне нужно будет перейти в ViewController, который содержит MWPhotoBrowser.MWPhotoBrowser Пустой экран/методы делегата не вызываются

В настоящее время я создал PhotoGalleryController и использовал это как контейнер для MWPhotoBrowser, поскольку MWPhotoBrowser является подклассом UIViewController.

Однако, когда я запускаю приложение в симуляторе, я получаю пустой экран с кругом посередине, предполагая, что PhotoBrowser был загружен, но не возвращается фотография.

Я пошел вперед и зарегистрировал все мои методы делегирования и обнаружил, что вызывается numberOfPhotos, но фактические функции, которые должны были возвращать объекты MWPhoto, даже не вызывались!

Я не совсем уверен, почему фактическая загрузка фото объектов никогда не завершена, хотя я реализовал все надлежащие методы делегатов в контейнере ViewController.

Я проверил выходные данные ответа, предоставленные вызовом API, и распечатал self.photoList. Кажется, все в порядке, поэтому я не уверен, почему он не возвращает никаких фотографий.

PhotoGalleryController.m

#import "PhotoGalleryController.h" 
#import "MZApi.h" 
#import "MZUser.h" 

@implementation PhotoGalleryController 


- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    //Make the HTTP request and setup the photo array in MZUser. Change from "usertext" later. 
    [MZApi loadOwnPhotoWithUserID:@"usertext" andCompletionHandler:^(NSMutableArray *photos, NSError *error) { 
     if(photos!=nil){ 
      self.userPhotoList = photos; 
      [[MZUser getCurrentUser]setPhotoList:self.userPhotoList]; 
      //NSLog(@" %@", self.userPhotoList); 
      //Should currently be null because CurrentUser is not created yet. 
     } 
     else{ 
      NSLog(@"Failed to allocate photos!"); 
     } 

    }]; 


    MWPhotoBrowser *browser = [[MWPhotoBrowser alloc]initWithDelegate:self]; 



    browser.displayActionButton = YES; // Show action button to allow sharing, copying, etc (defaults to YES) 
    browser.displayNavArrows = NO; // Whether to display left and right nav arrows on toolbar (defaults to NO) 
    browser.displaySelectionButtons = NO; // Whether selection buttons are shown on each image (defaults to NO) 
    browser.enableGrid = YES; // Whether to allow the viewing of all the photo thumbnails on a grid (defaults to YES) 
    browser.startOnGrid = YES; // Whether to start on the grid of thumbnails instead of the first photo (defaults to NO) 
    [self.view addSubview:browser.view]; 



} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(NSUInteger) numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser{ 
    return [self.userPhotoList count]; 

} 
- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index{ 

    if(index<self.userPhotoList.count){ 
     NSString *temp = [[self.userPhotoList objectAtIndex:index]file_url]; 
     MWPhoto *photo = [MWPhoto photoWithURL:[NSURL URLWithString:temp]]; 
     return photo; 
    } 
    return nil; 
} 
-(id <MWPhoto>) photoBrowser:(MWPhotoBrowser *)photoBrowser thumbPhotoAtIndex:(NSUInteger)index{ 
    NSLog(@"Thumb Delegate Called!"); 
    if(index<self.userPhotoList.count){ 
     NSString *temp = [[self.userPhotoList objectAtIndex:index]file_url]; 
     MWPhoto *photo = [MWPhoto photoWithURL:[NSURL URLWithString:temp]]; 
     return photo; 
    } 
    return nil; 
} 


@end 

PhotoGalleryController.h

#import <UIKit/UIKit.h> 
#import "MWPhotoBrowser.h" 

@interface PhotoGalleryController : UIViewController <MWPhotoBrowserDelegate> 
@property(strong, nonatomic) NSMutableArray * userPhotoList; 

- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser; 
- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index; 
- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser thumbPhotoAtIndex:(NSUInteger)index; 

@end 

Пример ответа сервера:

(
     { 
     dislikes = 0; 
     "file_url" = "http://localhost:3000/static/photos/2.jpg"; 
     likes = 0; 
     "photo_id" = 2; 
     "user_id" = kai1234; 
    }, 
     { 
     dislikes = 4; 
     "file_url" = "http://localhost:3000/static/photos/1.jpg"; 
     likes = 5; 
     "photo_id" = 1; 
     "user_id" = kai1234; 
    } 
) 

ответ

0

Вы хотите добавить браузер для просмотра, когда вы загрузка фотографий с помощью блока, обычно есть задержка при загрузке фотографий с блоком, поэтому браузер получит пустой объект.

ваш код должен выглядеть

#import "PhotoGalleryController.h" 
#import "MZApi.h" 
#import "MZUser.h" 

@implementation PhotoGalleryController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    //Make the HTTP request and setup the photo array in MZUser. Change from "usertext" later. 

    self.userPhotoList = [NSMutableArray array]; 
    [MZApi loadOwnPhotoWithUserID:@"usertext" andCompletionHandler:^(NSMutableArray *photos, NSError *error) { 
     if(photos!=nil){ 
      self.userPhotoList = photos; 
      [[MZUser getCurrentUser] setPhotoList:self.userPhotoList]; 
      //NSLog(@" %@", self.userPhotoList); 
      //Should currently be null because CurrentUser is not created yet. 

      for (int i = 0; i < photos.count; i++) 
      { 
       [self.userPhotoList addObject:[MWPhoto photoWithURL:[NSURL URLWithString:[[photos objectAtIndex:i] file_url]]]; 
      } 

      MWPhotoBrowser *browser = [[MWPhotoBrowser alloc]initWithDelegate:self]; 
      browser.displayActionButton = YES; // Show action button to allow sharing, copying, etc (defaults to YES) 
      browser.displayNavArrows = NO; // Whether to display left and right nav arrows on toolbar (defaults to NO) 
      browser.displaySelectionButtons = NO; // Whether selection buttons are shown on each image (defaults to NO) 
      browser.enableGrid = YES; // Whether to allow the viewing of all the photo thumbnails on a grid (defaults to YES) 
      browser.startOnGrid = YES; // Whether to start on the grid of thumbnails instead of the first photo (defaults to NO) 
      [self.view addSubview:browser.view]; 
     } 
     else{ 
      NSLog(@"Failed to allocate photos!"); 
     } 

    }]; 
} 


- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(NSUInteger) numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser{ 
    return [self.userPhotoList count]; 

} 
- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index{ 

    if(index<self.userPhotoList.count){ 
     return [self.userPhotoList objectAtIndex:index]; 
    } 
    return nil; 
} 
-(id <MWPhoto>) photoBrowser:(MWPhotoBrowser *)photoBrowser thumbPhotoAtIndex:(NSUInteger)index{ 
    NSLog(@"Thumb Delegate Called!"); 
    if(index<self.userPhotoList.count){ 
     return [self.userPhotoList objectAtIndex:index]; 
    } 
    return nil; 
} 


@end 
+0

Я просто попытался это решение. Помимо комментирования self.userPhotoList = фотографий, я получаю недопустимый контекст. Я думаю, это связано с тем, что вызов self.view изнутри блока относится к MZApi, а не к ViewController. –

+0

Вызов self.view в блоке относится к представлению вашего viewcontroller, этот код просто получает вызов после получения ответа, можете ли вы вставить, как выглядит ваш ответ сервера? Я не получил то, что file_url ссылается на – Mortgy

+0

file_url переходит к ссылке, которая указывает на изображение, которое подается в статической файловой системе. –