我試圖將一組圖像從Web服務加載到UICollectionView
,我正在使用MKNetworkKit
來處理網絡操作。MKNetworkEngine不會觸發其方法
這是一個奇怪的問題,因爲它在一種情況下工作,而不在另一種情況下。請耐心等待,這是一個很長的帖子。
我有嵌入作爲其主視圖中UICollectionView
一個UIViewController
一個簡單的故事板的應用程序(無法使用UICollectionViewController
由於UI的改變,我該怎麼辦後)。
我已經創建了一個類MKNetworkEngine
的子類來處理從Web服務中檢索圖像的方法。
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做了一個小的UI升級到應用程序。它只是在集合視圖下添加一個表視圖。沒有更改網絡代碼。只需要一個新的子類MBPullDownController
即可將集合視圖和表格視圖嵌入到主視圖控制器中。
但是,當我這樣做,圖像根本不加載。我在ImageEngine類的方法內部放置了一個斷點,以查看它們是否被解僱,但從來沒有涉及到這一點。 (奇怪的是,這個代碼實際上在今天早上運行的很好,現在不行,我完全不知道爲什麼)。它不會拋出任何錯誤或警告。
我已經上傳了兩個項目來演示這個問題,以便其他人更容易理解。如果有人能幫助我,我會很感激。在過去的幾個小時裏,我一直拉着我的頭髮。
Source的版本是正常工作。
This是與該問題的項目的來源。 ()當你運行它時,它會顯示一個空白的白色視圖,它看起來像一個普通的視圖,但它是收集視圖,我加載了一組本地圖像,看看它的工作和它是否)
謝謝。
這是正常的顯示空白的觀點,因爲有沒有收集視圖或一個「MKNetworkEngine」(至少在第二個鏈接「的問題」 – TonyMkenu
有一個集合視圖[見](http://i.imgur.com/RKHcb8a.png)。視圖被加載到頂部視圖控制器p中以編程方式使用故事板ID。而MKNetworkEngine的子類在項目中稱爲ImageEngine。 – Isuru
@TonyMkenu哦等等!你是對的。我上傳了一個錯誤的項目。感謝您注意到這一點。鏈接已更新。 – Isuru