Я пытаюсь загрузить набор изображений из веб-службы в UICollectionView
, и я использую MKNetworkKit
для обработки сетевых операций.MKNetworkEngine не запускает его методы
Это немного странная проблема, потому что она работает в одном сценарии и не в другом. Пожалуйста, не стесняйтесь со мной, это немного длинный пост.
У меня есть простой раскадровки приложение с UIViewController
с UICollectionView
вложенной в качестве главного вида (не может использовать UICollectionViewController
из-за изменения пользовательского интерфейса я буду делать позже).
Я создал класс, который является подклассом MKNetworkEngine
, чтобы обработать метод для получения изображений из веб-службы.
ImageEngine.h
#import "MKNetworkEngine.h"
@interface ImageEngine : MKNetworkEngine
typedef void (^ImagesResponseBlock)(NSMutableArray *imageURLs);
- (void)allImages:(ImagesResponseBlock)imageURLBlock errorHandler:(MKNKErrorBlock)errorBlock;
@end
ImageEngine.m
#import "ImageEngine.h"
@implementation ImageEngine
- (void)allImages:(ImagesResponseBlock)imageURLBlock errorHandler:(MKNKErrorBlock)errorBlock
{
MKNetworkOperation *op = [self operationWithPath:@"All_Images.php"];
[op addCompletionHandler:^(MKNetworkOperation *completedOperation) {
[completedOperation responseJSONWithCompletionHandler:^(id jsonObject) {
imageURLBlock(jsonObject[@"Images"]);
}];
} errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) {
errorBlock(error);
}];
[self enqueueOperation:op];
}
- (NSString *)cacheDirectoryName
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths[0];
NSString *cacheDirectoryName = [documentsDirectory stringByAppendingPathComponent:@"SomeImages"];
return cacheDirectoryName;
}
@end
В представлении класса контроллера с точки зрения сбора,
#import "AppDelegate.h"
#import "GridViewController.h"
#import "ImageCell.h"
@interface GridViewController() <UICollectionViewDelegate, UICollectionViewDataSource>
@property (strong, nonatomic) IBOutlet UICollectionView *collectionView;
@property (strong, nonatomic) NSMutableArray *images;
@property (strong, nonatomic) NSString *selectedImageUrl;
@end
@implementation GridViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[ApplicationDelegate.imageEngine allImages:^(NSMutableArray *images) {
self.images = images;
[self.collectionView reloadData];
} errorHandler:^(NSError *error) {
NSLog(@"MKNetwork Error: %@", error.localizedDescription);
}];
}
#pragma mark - UICollectionViewDataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.images.count;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
ImageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
NSDictionary *thisImage = self.images[indexPath.row];
self.selectedImageUrl = [NSString stringWithFormat:@"%@%@", @"http://toonmoodz.osmium.lk/", thisImage[@"image"]];
[cell.imageView setImageFromURL:[NSURL URLWithString:self.selectedImageUrl]];
return cell;
}
@end
Это работает просто отлично. Загрузка изображений, как ожидалось.
Затем я сделал небольшое обновление пользовательского интерфейса для приложения, используя MBPullDownController. Он просто добавляет представление таблицы в виде коллекции. Нет изменений в сетевом коде. Просто новый подкласс MBPullDownController
, чтобы вставить представление коллекции и представление таблицы в главный контроллер представления.
Но когда я это делаю, изображения не загружаются вообще. Я поставил точку останова в методах класса ImageEngine, чтобы убедиться, что они уволены, но это никогда не доходит до этого. (Странно, что этот код действительно работал нормально только сегодня утром. Теперь это не так, и я не знаю, почему). Он не вызывает никаких ошибок и предупреждений.
Я загрузил два проекта, демонстрирующих эту проблему, чтобы другим было легче понять. Если кто-нибудь сможет мне помочь, я буду очень благодарен. В последние несколько часов я вытягивал свои волосы.
Source версии правильно работает.
This является источником проекта, который связан с проблемой. (Когда вы запустите его, он отобразит пустой белый вид. Он выглядит как простой вид, но это коллекционный вид. Я загрузил набор локальных изображений, чтобы увидеть, работает ли он и работает ли он)
Спасибо.
Это нормально, чтобы показать чистый вид, потому что есть нет коллекции или «MKNetworkEngine» (по крайней мере, во второй ссылке «с проблемой». – TonyMkenu
Существует вид коллекции. [См.] (http://i.imgur.com/RKHcb8a.png). представления загружаются в контроллер верхнего уровня p с использованием идентификаторов раскадровки. И подкласс «MKNetworkEngine» называется проектом ImageEngine в проекте. – Isuru
@TonyMkenu Oh Wait! Ты прав. Я загрузил неправильный проект. Спасибо, что заметили это. Ссылка обновлена. – Isuru