Ios 不兼容的块指针类型-Objective-c
我想在主线程中用return语句调用下面的代码,但我得到了下面的错误 将“NSString*(^)(void)”传递到的块指针类型不兼容 类型为'dispatch_block_t_Nonnull'的参数(也称为'void(^)(void)') 下面是我的代码Ios 不兼容的块指针类型-Objective-c,ios,objective-c,multithreading,Ios,Objective C,Multithreading,我想在主线程中用return语句调用下面的代码,但我得到了下面的错误 将“NSString*(^)(void)”传递到的块指针类型不兼容 类型为'dispatch_block_t_Nonnull'的参数(也称为'void(^)(void)') 下面是我的代码 NSString *hash = [AGMobileService accessTokenHashForDate:date withParameters:[NSArray new]]; + (NSString *)accessToken
NSString *hash = [AGMobileService accessTokenHashForDate:date withParameters:[NSArray new]];
+ (NSString *)accessTokenHashForDate:(NSDate *)date withParameters:(NSArray *)params{
dispatch_async(dispatch_get_main_queue(), ^{
NSString *accessToken = ((AppDelegate *)[[UIApplication sharedApplication] delegate]).loginProfile.accessToken;
NSString *paramsStr = [params componentsJoinedByString:@""];
NSString *hashStr = [NSString stringWithFormat:@"%@%@%@%@", [CommonUtil IMEI], [date agileHashFormattedString], (!paramsStr) ? @"" : paramsStr, accessToken];
return [AGMobileService computeHash:hashStr usingHash:HASH_SALT];
});
}
+ (NSString *)computeHash:(NSString *)text usingHash:(NSString*)hashSalt {
NSString *textToEncode = [NSString stringWithFormat:@"%@%@", hashSalt, text];
NSData *data = [textToEncode dataUsingEncoding:NSUTF8StringEncoding];
unsigned char hash[CC_SHA256_DIGEST_LENGTH];
if ( CC_SHA256([data bytes], (int) [data length], hash) ) {
NSData *sha256 = [NSData dataWithBytes:hash length:CC_SHA256_DIGEST_LENGTH];
return [sha256 base64EncodedString];
}
return nil;
}
我遇到过这样的情况,我只是删除了dispatch块中的返回码,但我不知道原因。因此我也想知道原因。它到底是哪一行?什么是
computeHash
?最重要的是,为什么要从同步函数异步返回,希望它如何正常工作?@Lu\ucomutehash是返回字符串的类方法。请检查编辑后的答案。@Lu\u我收到警告消息,如[[UIApplication sharedApplication]delegate]必须在主线程中。所以,我试着调用主线程中的那个部分。要使它工作,你必须决定是同步还是不同步。OP正在调用一个返回NSString*
的块,而该块预期不返回任何内容(void
)。虽然“删除返回代码”可能会消除错误,但它无法帮助OP找到有效的解决方案,因为OP的代码显然以其当前形式被破坏。@特洛伊木马是的,你是对的,我所做的无法解决问题。谢谢你告诉我原因。如果我想像海报想做的那样异步重新运行值,那么该怎么做可以解决这个问题?通常,您调用“完成处理程序”(另一个块),以某种方式将结果传递回调用方。