Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 不兼容的块指针类型-Objective-c_Ios_Objective C_Multithreading - Fatal编程技术网

Ios 不兼容的块指针类型-Objective-c

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

我想在主线程中用return语句调用下面的代码,但我得到了下面的错误

将“NSString*(^)(void)”传递到的块指针类型不兼容 类型为'dispatch_block_t_Nonnull'的参数(也称为'void(^)(void)')

下面是我的代码

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的代码显然以其当前形式被破坏。@特洛伊木马是的,你是对的,我所做的无法解决问题。谢谢你告诉我原因。如果我想像海报想做的那样异步重新运行值,那么该怎么做可以解决这个问题?通常,您调用“完成处理程序”(另一个块),以某种方式将结果传递回调用方。