- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将一组图像从 Web 服务加载到 UICollectionView
,并使用 MKNetworkKit
来处理网络操作。
这是一个有点奇怪的问题,因为它在一种情况下有效,而在另一种情况下却无效。请耐心等待,这篇文章有点长。
我有一个简单的 Storyboard应用程序,其中包含 UIViewController
,并嵌入了 UICollectionView
作为其主视图(无法使用 UICollectionViewController
由于用户界面发生了变化,我稍后会做)。
我创建了一个类,它是 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
在带有 Collection View 的 View Controller 类中,
#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 升级。它只是在 Collection View 下添加一个 TableView 。网络代码没有变化。只是 MBPullDownController
的一个新子类,用于在主视图 Controller 中嵌入 Collection View 和 TableView 。
但是当我这样做时,图像根本不会加载。我在 ImageEngine 类的方法中放置了一个断点,看看它们是否被解雇了,但它从来没有发生过。 (奇怪的是这段代码实际上就在今天早上运行良好。现在它没有,我完全不知道为什么)。它也不会抛出任何错误或警告。
我已经上传了两个项目来演示这个问题,以便其他人更容易理解。如果有人可以帮助我,我将不胜感激。过去几个小时我一直在为此烦恼不已。
Source 工作正常的版本。
This是有问题的项目的来源。 (当你运行它时,它会显示一个空白的白色 View 。它看起来像一个普通 View ,但它是 Collection View 。我加载了一组本地镜像来查看它是否工作,并且确实如此)
谢谢。
最佳答案
当我在 viewDidLoad
方法的 GridViewController
中设置断点时,执行 po [[UIApplication sharedApplication] valueForKeyPath:@"delegate.imageEngine"]
在控制台中,我看到 imageEngine
属性等于 nil。
看起来 application:didFinishLaunchingWithOptions
正在 GridViewController
中的 viewDidLoad
之后执行。
我从你的 application:didFinishLaunchingWithOptions
中删除了这两行:
self.imageEngine = [[ImageEngine alloc] initWithHostName:@"toonmoodz.osmium.lk"];
[self.imageEngine useCache];
然后我将 imageEngine 延迟加载器添加到 AppDelegate
及其工作 http://cl.ly/image/1S172D2e050J
- (ImageEngine*) imageEngine {
if (_imageEngine == nil) {
_imageEngine = [[ImageEngine alloc] initWithHostName:@"toonmoodz.osmium.lk"];
[_imageEngine useCache];
}
return _imageEngine;
}
关于ios - MKNetworkEngine 不触发它的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21067714/
我正在尝试将一组图像从 Web 服务加载到 UICollectionView,并使用 MKNetworkKit 来处理网络操作。 这是一个有点奇怪的问题,因为它在一种情况下有效,而在另一种情况下却无效
我正在使用 MKNetworkkit 将 XML 数据解析到服务器。在进入成功 block 之前,它会无缘无故地因 EXC_BAD_ACCESS 而崩溃,并且我已经像所有东西一样使用 NSZombie
我刚刚切换到使用 MKNetworkKit,我很困惑是否应该在应用程序启动时创建一个 MKNetworkEngine 对象并在我需要网络连接时使用它,或者我是否应该每次都创建一个新对象? 如果我只需要
我正在尝试使用 MKNetworkEngine,但 header 谈论缓存。这对我的应用程序来说是非常糟糕的,它需要下载货币汇率 JSON 文件并且缓存是不行的。 有没有办法为整个 MKNetwork
我创建了一个 iOS 应用程序,它使用 MKNetworkEngine 将相机拍摄的图像上传到服务器,as outlined in the following tutorial如果我将主机设置为 po
我是一名优秀的程序员,十分优秀!