>

Swift의 새로운 기능입니다. Objective c에 코드가 있으며이 코드에서 NSMUtableDictionary가 컴포지션 핸들러 블록으로 반환됩니다.

완료 블록에서 API를 누르고 API 응답 사전을 반환해야합니다. 내 코드는 Objective c에서 완벽하게 실행됩니다. 그러나 브리지 헤더를 사용하여 신속하게 동일한 방법을 호출하면 충돌이 발생합니다.

내 목표 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 헤더 에서이 파일을 가져오고 Swift 파일에서 사용하면 충돌이 발생합니다

목표 C :

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

그리고 빠르게

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

빠른 충돌에서 다음 줄에 발생합니다

complitionHandler (response);

완료 블록에서 응답을 반환해야하는 경우

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

문제가 무엇이며 어떻게 해결해야하는지 알려주십시오. 목표 C뿐만 아니라 신속하게 사용해야합니다

  • 답변 # 1

    내 의견에서 말했듯이 응답 매개 변수가 nil인지 확인하십시오. 문제가 빠른 빠른 번역과 관련이 있습니다.이 매개 변수는 객관적 C에서 nullable이어야하며 빠른으로 변환해야합니다.   NSMutableDictionary? 가 아니라

  • 답변 # 2

    먼저 디버깅을 활성화하고 디버그->중단 점->예외 중단 점 작성을 추가하십시오.

    Xcode에서 디버깅-https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/debugging_tools.html

    발생하고있는 오류 찾기

    내 코드 버전은 이쪽

    NSMutableDictionary
    
    

  • 답변 # 3

    typealias CompletionHandler = (NSMutableArray?) -> Void mycompletionBlock { (array) in print((array?.object(at: 0))!) } func mycompletionBlock(block: CompletionHandler) { let array = NSMutableArray() array.add("hello") block(array) }?을 추가하십시오.

    NSMutableDictionary
    
    

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

  • 이전 swift - 오디오가 계속 되더라도 Picture in Picture가 사라짐
  • 다음 scorm2004 - scorm 2004 - scorm cloud에 suspend_data가 저장되지 않음