2017-11-22 2 views
2

나는 페이스트 보드의 내용을보고 그것으로 지능적으로 뭔가를하려고하는 iOS 앱을 가지고있다. (이 시점에서 대부분의 사람들이 iOS 11.x를 사용하고 있다고 생각 하긴하지만 iOS 9.3 이상이 필요합니다.)UIPasteboard가 Handoff를 사용하여 다른 장치의 텍스트를 복사하지 못하게 할 수 있습니까?

문제는 내 장치 (iPhone X)가 항상 내 MacBook Pro에서 데이터를 복사한다는 것입니다. 예를 들어 필자는 MacBook에서 텍스트를 선택하여 복사하여 골판지에 넣을 수 있습니다. 그런 다음 내 iPhone에서 내 전자 메일 주소와 같은 텍스트를 선택하여 복사하여 거기에있는 대지 위에 놓을 수 있습니다. 그런데 내 응용 프로그램을 실행하고 대지에 액세스하려고하면 몇 초가 걸리고 내 MacBook의 텍스트가 사용됩니다!

특히 네트워크를 통해 데이터를 가져 오는 동안 지연으로 인해 UI가 응답하지 않기 때문에 특히 성가시다. 차라리 [UIPasteboard -hasStrings] 메서드를 즉시 반환하는 것이 좋습니다.

setItems:options:을 사용하면 항목을 추가 할 때 UIPasteboardOptionLocalOnly의 옵션 값을 사용할 수 있다는 것을 알고있어 해당 항목이 기기에 남아있어 MacBook으로 전송되지 않도록합니다. 그러나이 옵션은 마분지가 자동으로 MacBook에서 데이터를 가져 오지 못하게합니다.

hasStrings이 원격 랩톱에서 자동으로 데이터를 가져 오지 못하도록 방지하는 방법이 있습니까? 즉, 해당 장치에서 해당 기능을 완전히 비활성화하지 마십시오 (예 : 모든 사용자가 시스템 수준에서 핸드 오프를 사용하지 않도록 설정하고 싶지는 않습니다. 앱).

답변

0

비동기 기능을 사용하여 데이터를 검색하고 UI 차단을 방지합니다. 이런 식으로 뭔가 : 다음

func getStringFromClipboard(completion: @escaping (_ copiedString: String?) -> Void) { 
    DispatchQueue.global(qos: .userInitiated).async { 
     let pastboardString = UIPasteboard.general.string 

     DispatchQueue.main.async { 
      completion(pastboardString) 
     } 
    } 
} 

그리고 :

override func viewWillAppear(_ animated: Bool) { 
    super.viewWilAppear(animated) 
    getStringFromClipboard { (copiedString) in 
     guard let copiedString = copiedString else { 
      return 
     } 
     // your code if clipboard contains string 
    } 
}