LeavesCache.m适用于模拟器,但不适用于设备

时间:2014-11-21 06:35:01

标签: ios objective-c uiimage cgimageref

这是我的第一次发帖所以请耐心等待。我一直在网站后搜索网站,我似乎无法找到解决此问题的任何网站。如果有人能回答我会很高兴。

LeavesCache.m去年被修改过,如果不是错误地容纳ios 7我认为。

代码如下,但我收到EXC_BAD_ACCESS的{​​{1}}。

我将其更改为return pageImage.CGImage但现在我的页面显示为空白,即使它打印了正确的页面索引。请帮忙!

return (__bridge CGImageRef)(pageImage)

快速说明,内容在模拟器上完美呈现,但在iPad上空白。

1 个答案:

答案 0 :(得分:0)

我设法最终解决了这个问题。这是多么恰当我不知道。但对于那些使用LeavesView的人。如果'return pageImage.CGImage'抛出'EXC_BAD_ACCESS',你可以通过删除这一行解决它:

//CGImageRelease(image);

在此函数中可以找到'imageForPageIndex':

- (CGImageRef)imageForPageIndex:(NSUInteger)pageIndex {
if (CGSizeEqualToSize(self.pageSize, CGSizeZero))
    return NULL;

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL,
                                             self.pageSize.width,
                                             self.pageSize.height,
                                             8,                     /* bits per component*/
                                             self.pageSize.width * 4,   /* bytes per row */
                                             colorSpace,
                                             kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextClipToRect(context, CGRectMake(0, 0, self.pageSize.width, self.pageSize.height));

[self.dataSource renderPageAtIndex:pageIndex inContext:context];

CGImageRef image = CGBitmapContextCreateImage(context);
CGContextRelease(context);

[UIImage imageWithCGImage:image];
//CGImageRelease(image);

return image;
}

请维护您的'cachedImageForPageIndex:'功能。如果您更改了它,代码如下:

- (CGImageRef)cachedImageForPageIndex:(NSUInteger)pageIndex {
NSNumber *pageIndexNumber = [NSNumber numberWithInt:pageIndex];
UIImage *pageImage;
@synchronized (self.pageCache) {
    pageImage = [self.pageCache objectForKey:pageIndexNumber];
}
if (!pageImage) {
    CGImageRef pageCGImage = [self imageForPageIndex:pageIndex];
    if (pageCGImage) {
        pageImage = [UIImage imageWithCGImage:pageCGImage];
        @synchronized (self.pageCache) {
            [self.pageCache setObject:pageImage forKey:pageIndexNumber];
        }
    }
}
return pageImage.CGImage;
}