ios - 하이브리드 - swift webview 예제




UIActivityViewController가 iOS 11에서 작동하지 않습니다. (3)

나는 같은 문제를 겪고 있었고 UI Thread를 호출하지 않는다는 것을 알아 냈습니다. UI 스레드에서 실행하고 문제가 해결되는지 확인하십시오.

UIActivityViewController를 사용하여 기사 URL을 공유하고 아래 코드를 사용하여,

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:shareItemArray applicationActivities:nil];

activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAirDrop]; 

[self presentViewController:activityVC animated:YES completion:nil];

위의 코드는 iOS 9 및 10에서 작동하지만 iOS 11에서는 작동하지 않습니다.

내가 그것을 디버깅, 코드가 잘 실행 후, 나는 아래의 콘솔에 오류 로그가 나타납니다.

[ShareSheet] 오류 : ShareUI보기 서비스 확장 프로그램에 대한 연결을 설정하기 위해 대기하는 동안 시간이 초과되었습니다.

이 문제에 직면 한 사람이 있습니까? 해결 방법이 있습니까?

편집 : 깨끗한 후 프로젝트를 실행, 2 또는 3 번 UIActivityViewController 열렸어요, 동일한 노력을 다시 시도했다, 처음으로 내가 UIActivityViewController 열리고있는 두 번째 시간을 위의 같은 오류가 발생했습니다 .


사용자 인터페이스를 수정하는 모든 코드는 의도적으로 메인 큐에서 실행되어야합니다. 그래서 당신이해야 할 일은 이것뿐입니다.

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:shareItemArray applicationActivities:nil];

activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAirDrop]; 

dispatch_async(dispatch_get_main_queue(), ^{
    [self presentViewController:activityVC animated:YES completion:nil];
});

좀 더 자세한 설명 : dispatch_async() 는 UI를 업데이트하는 것이 안전 할 때 가까운 시간에 실행하기 위해 전달한 블록을 대기열에 넣습니다. 메인 큐에서 그렇게하지 않으면 이상한 일이 일어날 수 있습니다 (UI가 단순히 변경되지 않거나 오래된 변경 사항이 새로운 것 이후에 적용될 수 있음).

UI의 사용자 작업 (예 : 버튼을 누를 때 IBAction 에서 전달되는 메소드는 이미 기본 대기열에서 실행되므로 dispatch_async() 는 필요하지 않습니다 (당연히 IBAction 호출하지 않는다고 가정 할 때 다른 대기열에서 수동으로).

alloc / initsetExcludedActivityTypes: UI를 업데이트하지 않으므로 기본 대기열에서 호출 할 필요가 없습니다.


이 시도:

    dispatch_async(dispatch_get_main_queue(), ^{
         UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:shareItemArray applicationActivities:nil];

         activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAirDrop]; 
         dispatch_async(dispatch_get_main_queue(), ^{
               [self presentViewController:activityVC animated:YES completion:nil];
         });
    });

나는 같은 문제가 있었지만 Swift3에서는 괜찮 았어.







xcode9