LeavesCache.m在模拟器上工作,但不在设备上
问题描述:
它是我第一次发布,所以请耐心等待。我一直在网站后搜索网站,我似乎无法找到任何已解决此问题的网站。如果有人能回答我会很高兴。LeavesCache.m在模拟器上工作,但不在设备上
LeavesCache.m去年被修改,如果没有错误,以适应ios 7我认为。
该代码在下面,但我收到EXC_BAD_ACCESS
为return pageImage.CGImage
。
我将其更改为return (__bridge CGImageRef)(pageImage)
,但现在我的页面出现空白,即使它打印了正确的页面索引。请帮忙!
CGImageRef)cachedImageForPageIndex:(NSUInteger)pageIndex {
NSNumber *pageIndexNumber = [NSNumber numberWithInt:pageIndex];
UIImage *pageImage;
@synchronized (self.pageCache) {
pageImage = [self.pageCache objectForKey:pageIndexNumber];
}
if (!pageImage) {
CGImageRef pageCGImage = CGImageRetain([self imageForPageIndex:pageIndex]);
if (pageCGImage) {
pageImage = [UIImage imageWithCGImage:pageCGImage];
@synchronized (self.pageCache) {
[self.pageCache setObject:pageImage forKey:pageIndexNumber];
}
}
}
//modified here
//return pageImage.CGImage;
return (__bridge CGImageRef)(pageImage);
}
快速注意,内容在模拟器上完美显示,但在iPad上显示为空白。
答
我终于解决了这个问题。这我不知道这有多适当。但对那些使用LeavesView的人来说。
//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;
}
请保持如果“回归pageImage.CGImage”是扔你“EXC_BAD_ACCESS”,你可以通过删除这一行解决这你的'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;
}