2016-09-24 16 views
7

Tôi đang cố gắng ghi/ghi video không đồng bộ trên chuỗi chính. Tuy nhiên, khi tôi gọi dispatch.main.async, tôi luôn nhận được lỗi:dispatchqueue trong nhanh chóng 3 xuất hiện dưới dạng định danh chưa được giải quyết

use of unresolved identifier DispatchQueue 

Tôi đã nhìn khắp mọi nơi từ WWDC để Tài liệu của Apple, nhưng tôi thấy không có bằng chứng của các loại bị phản đối.

Đây là mã:

if !self.cameraEngine.isRecording { 
      if let url = CameraEngineFileManager.temporaryPath("video.mp4") { 
       self.cameraButton.setTitle("stop recording", forState: []) 
       self.cameraEngine.startRecordingVideo(url, blockCompletion: { (url: NSURL?, error: NSError?) -> (Void) in 
        if let url = url { 

         DispatchQueue.main.async { 
          self.cameraButton.setTitle("start recording", for: .normal) 
          CameraEngineFileManager.saveVideo(url, blockCompletion: { (success: Bool, error: Error?) -> (Void) in 
           if success { 
            let alertController = UIAlertController(title: "Success, video saved !", message: nil, preferredStyle: .alert) 
            alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) 
            self.present(alertController, animated: true, completion: nil) 
           } 
          }) 
         } 
        } 
       }) 
      } 
     } 
     else { 
      self.cameraEngine.stopRecordingVideo() 
     } 
    } 

Trả lời

0

Tôi nghĩ rằng bạn không có một trong những trong danh sách các khuôn khổ của bạn. Hãy thử nhập một trong số này và thử đặt DispatchQueue trong tệp của bạn.

import Foundation 
import UIKit 
// Any System Framework 

Điều này có thể xảy ra nếu tệp của bạn không phải là tệp Swift hoặc tệp của bạn là tệp Swift nhưng bạn không có bất kỳ khung công tác nào ở trên cùng.

+1

Tôi đã nhập cả hai SDK trong dự án của mình, tuy nhiên vấn đề vẫn còn tồn tại – NightHawk95

7

Bạn có thể đặt

import Foundation 

hoặc

import Dispatch 

vào đầu mã của bạn để bắt đầu sử dụng DispatchQueue lớp mà không cần bất kỳ vấn đề.

+0

nhập văn kiện đã làm cho tôi. Tôi đã chạy mã của tôi trong IBM Swift Sandbox bằng cách này ... Cảm ơn! –

+2

'Import Dispatch' hoạt động trên Ubuntu –

3

Các giveaway đây là dòng này:

self.cameraButton.setTitle("stop recording", forState: []) 

Đó là không Swift 3. Do đó, tệp của bạn là tệp Swift 2.3. Do đó không có điều như DispatchQueue. Bạn nên sử dụng

dispatch_async(dispatch_get_main_queue()) { ... 
+0

OP có lẽ tốt hơn khi viết lại mã của chúng để tuân thủ Swift 3. Có lẽ không cần phải học Swift 2.3 vào thời điểm này, vì nó phần lớn đã lỗi thời và có lẽ không có nhiều codebase có thể yêu cầu nó. – Gino

+0

Và, trên thực tế, câu trả lời của Matt là một chút khó hiểu/gây nhầm lẫn, vì nó trình bày một giải pháp Swift 2.3. Giải pháp tốt hơn, bền hơn sẽ là chuyển đổi mã 2.3 thành mã 3.x. Không có vấn đề gì trong việc hỗ trợ phiên bản kế thừa của Swift chuyển tiếp .. Khi tôi đọc câu trả lời của Matt, ban đầu tôi nghĩ rằng tôi cần tìm hiểu cú pháp dispatch_async này, khi, trên thực tế, DispatchQueue đã là một cú pháp tốt hơn và mới hơn .. – Gino

Các vấn đề liên quan