gpt4 book ai didi

ios - Objective C Completion Block 导致 swift 崩溃

转载 作者:可可西里 更新时间:2023-11-01 00:55:27 25 4
gpt4 key购买 nike

我是 Swift 的新手,我在 Objective c 中有一个代码,在这段代码中,一个 NSMUtableDictionary 作为组合处理程序 block 返回。

我需要点击 API 并在完成 block 中返回 API 响应字典。我的代码在 Objective c 中完美运行。但是当我使用桥头从 swift 调用相同的方法时,它会导致崩溃。

我的 Objective-C 代码是:

MyClass.h

#import <UIKit/UIKit.h>
@interface MYClass : NSObject
typedef void(^MyCompletionHandler)(NSMutableDictionary *_Nullable);

+ (void)myMethod:(NSString*_Nullable)param ComplitionHandler:(MyCompletionHandler _Nullable)complitionHandler;
@end

MYClass.m

#import "MYClass.h"
@implementation MYClass
+ (void)myMethod:(NSString*_Nullable)param ComplitionHandler:(MyCompletionHandler _Nullable)complitionHandler {


dispatch_queue_t queue = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
/// here I've written code to hit APi and got successfull response in nsmutableDict
NSMutableDictionary *response = [[NSMutableDictionary alloc]init];

response = jSonResponse;


dispatch_async(dispatch_get_main_queue(), ^{
complitionHandler (response);
});

});
}
@end

现在当我在我的应用程序中使用它时,如果我在 Objective C 中使用它,它运行完美,但如果我在 Swift Bridging header 中导入这个文件,当我在 Swift 文件中使用它时,它会导致崩溃

在 Objective-C 中:

[MYClass myMethod:@”param Value” ComplitionHandler:^(NSMutableDictionary * MyResponse) {
NSLog(@"Response = %@",MyResponse);
}];

并且 swift

MYClass.myMethod("param Value", complitionHandler: {(MyResponse: NSMutableDictionary) -> Void in
print("MyResponse = \(MyResponse)")
} as? MyCompletionHandler)

快速崩溃发生在下一行

complitionHandler (response);

当完成 block 中需要返回Response时

  dispatch_async(dispatch_get_main_queue(), ^{
complitionHandler (response); //Thread 1: EXC_BAD_ACCESS (code=1, address=0x10)
});

谁能告诉我这是什么问题以及如何解决这个问题。我需要在 swift 和 Objective c 中使用

最佳答案

正如我在评论中所说,检查您的响应参数是否为 nil,您的问题与糟糕的 swift 翻译有关,该参数在 Objective-C 中应该可以为 null 并且翻译成 swift 应该是 NSMutableDictionary? 而不是 NSMutableDictionary

关于ios - Objective C Completion Block 导致 swift 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49873550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com