2015-09-02 4 views
0

Следующий код работал нормально, пока я не обновил SDWebImage до V.3.7.3, теперь он дает мне ошибку. Я положил ($$) в начале и в конце кода, который отмечает мне ошибку, она находится под линией _HUD2 = [General showHUDInView:self.productImageView_ А на самом деле начинается здесь: completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)...Несовместимые типы указателей блоков | Xcode 6.4 | iOS 8.4

- (void)parseResponse:(NSString *)xml{ 
NSData *data = [xml dataUsingEncoding: NSUTF8StringEncoding]; 

_parserDetails3 = [[NSXMLParser alloc] initWithData:data]; 

[_parserDetails3 setDelegate:self]; 
[_parserDetails3 setShouldProcessNamespaces:YES]; 
[_parserDetails3 setShouldReportNamespacePrefixes:NO]; 
[_parserDetails3 setShouldResolveExternalEntities:NO]; 

if (![_parserDetails3 parse]) { 
    NSLog(@"Error de parseo"); 
} 
else if ([_details3 count] <= 0) { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"INFORMATION", nil) message:NSLocalizedString(@"NO_DETAIL_MODAL", nil) delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 

    [alert show]; 
} 
else { 
    NSLog(@"%d", [_details3 count]); 

    // Logic to fill general labels 
    _estiloLabel.text = [NSString stringWithFormat:@"%@ [%@]", [[_details3 objectAtIndex:0] estilo], [[_details3 objectAtIndex:0] nombreEst]]; 
    _lineaLabel.text = [[_details3 objectAtIndex:0] linea]; 
    _fechaSolLabel.text = [[_details3 objectAtIndex:0] fechaSol]; 
    _chinelaLabel.text = [[_details3 objectAtIndex:0] pielChinela]; 
    _tuboLabel.text = [[_details3 objectAtIndex:0] pielTubo]; 
    _specIDLabel.text = [[_details3 objectAtIndex:0] specID]; 

    NSLog(@"%@", [NSString stringWithFormat: IMAGES_PATH , [[_details3 objectAtIndex:0] imagenMuestra]]); 

    /*[self.productImageView setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat: IMAGES_PATH , [[_details3 objectAtIndex:0] imagenMuestra]]] placeholderImage:[UIImage imageNamed:@"cargando.gif"]];*/ 

    HUD2 = [General showHUDInView:self.productImageView withTitle:NSLocalizedString(@"LOADING", nil) withDetail:NSLocalizedString(@"IMAGE", nil)]; 
    //La solución de este método obsoleto es agregar 'sd_' a setImage (sd_setImageWithURL) 
    $$[self.productImageView sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat: IMAGES_PATH , [[_details3 objectAtIndex:0] imagenMuestra]]] placeholderImage:[UIImage imageNamed:nil] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)$$ { 
     [General hideHUD:HUD2]; 
    }]; 
} 

[_detail3TableView reloadData]; 
[_detail3TableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES]; 

[General hideHUD:HUD]; 
} 
сообщение

Error:Incompatible block pointer types sending 'void (^)(UIImage *__strong, NSError *__strong, SDImageCacheType)' to parameter of type 'SDWebImageCompletionBlock' (aka 'void (^)(UIImage *__strong, NSError *__strong, SDImageCacheType, NSURL *__strong)')

ответ

1

ошибка говорит вам, что вы пытаетесь передать блок неправильного типа: вы пытаетесь

void (^)(UIImage *__strong, NSError *__strong, SDImageCacheType) 

вместо правильного

void (^)(UIImage *__strong, NSError *__strong, SDImageCacheType, NSURL *__strong) 

Разница в том, что вы должны предоставить место для NSURL*. По-видимому, они изменили подпись обратного вызова. Вы должны изменить свой код на

[self.productImageView sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat: IMAGES_PATH , [[_details3 objectAtIndex:0] imagenMuestra]]] placeholderImage:[UIImage imageNamed:nil] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *url) { 
    [General hideHUD:HUD2]; 
}]; 

Обратите внимание на самый последний параметр.

0

В новой версии (в конце определения списка параметров блока) требуется дополнительный параметр (NSURL *).

Here is the commit, где это произошло, в SDWebImage repo.

Смежные вопросы