2014-11-21 182 views
0

它是我第一次發佈,所以請耐心等待。我一直在網站後搜索網站,我似乎無法找到任何已解決此問題的網站。如果有人能回答我會很高興。LeavesCache.m在模擬器上工作,但不在設備上

LeavesCache.m去年被修改,如果沒有錯誤,以適應ios 7我認爲。

該代碼在下面,但我收到EXC_BAD_ACCESSreturn 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上顯示爲空白。

回答

0

我終於解決了這個問題。這我不知道這有多適當。但對那些使用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; 
} 
相關問題