2014-11-21 9 views
0

Его первая публикация, поэтому, пожалуйста, несите меня. Я искал сайты после сайтов, и я не могу найти никого, кто бы разрешил эту проблему. Был бы рад, если бы кто-нибудь мог мне ответить.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.

ответ

0

Мне удалось окончательно решить эту проблему. Насколько это верно, я не знаю. Но тем, кто использует LeavesView. Если «возвращение 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; 
} 
Смежные вопросы