Size: a a a

2021 May 31

А

Александр in SwiftBook
Вот весь мой класс где я работаю с UploadTask

class UploadManager: NSObject, ObservableObject {
   
   private let storageOperationsService = StorageOperationsService()
   
   static var shared: UploadManager = {
       let instance = UploadManager()
       return instance
   }()
   var filename: String = String()
   var albumId: String  = String()
   var accessToken: String = String()
   
   private var session: URLSession!
   private let identifier = "com.go.background."
   var savedCompletionHandler: (() -> Void)?
   
   func uploadFile(fileName: String, localURL: URL, accessToken: String){
       let url = URL(string: "https://photoslibrary.googleapis.com/v1/uploads")!
       var request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData)
       request.allHTTPHeaderFields = ["Content-type": "application/octet-stream",
                                      "X-Goog-Upload-Protocol": "raw",
                                      "X-Goog-Upload-File-Name": "\(fileName)",
                                      "Accept-Encoding": "gzip"]
       
       request.addValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
       request.httpMethod = "POST"
       
       let configuration = URLSessionConfiguration.background(withIdentifier: identifier + filename)
       session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
       let task = session.uploadTask(with: request, fromFile: localURL)
       task.resume()
   }
}

extension UploadManager: URLSessionDataDelegate {

   func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
       if error != nil {
           print("Error:", error.debugDescription)
       } else {
           storageOperationsService.removeOperationFromCoreData(filename: self.filename)
       }
   }
   
   func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
       guard let uploadToken = String(data: data, encoding: .utf8) else { return }
   }
   
   func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) {
       
       DispatchQueue.main.async {
           self.savedCompletionHandler?()
           self.savedCompletionHandler = nil
       }
   }
}
источник

А

Александр in SwiftBook
я в цикле вызываю запрос и передаю разные filename, но по завершению выполнения запроса имею в ответ повторяющееся значение filename (последнего значения из цикла, а не разные соответственно к циклу). Как это возможно исправить не подскажите ?
источник

K А in SwiftBook
Передавай в savedComplitionHandler group.leave()
источник

K А in SwiftBook
Если вопрос в том что куда передавать group.leave(), то вот ответ.
источник

K А in SwiftBook
Но группы не дают последовательного выполнения , группы уведомляют тебя что последняя задача заканчилась, но последняя не в порядке в том как цикл у тебя начался, а последняя вплане та , которая завершилась позже всех
источник

А

Александр in SwiftBook
к сожалению  savedCompletionHandler существует  только для уведомления приложения что мы перешли в фоновый режим, и не вызывается пока мы исполняем задачу на переднем плане.
источник

K А in SwiftBook
Сек
источник

А

Александр in SwiftBook
Мне как раз необходимо после выполнения запроса, удалять из массива значение которое соответствует. Но по какой то причине по завершению я получаю другое значение. Проверял в методах делегата
urlSession(_:dataTask:didReceive:) и urlSession(_:task:didCompleteWithError:)
источник

K А in SwiftBook
После выполнения отправки (загрузки) по завершению какой метод вызывается?
источник

V

VH in SwiftBook
Скрол вью, в котором лежит table view, а под скроллом, вьюхи. Когда скрол проскроллен до самого низу, твои вьюхи активны, скрол начинается вверх - вьюхи не активны.
источник

DD

Duh Dummy in SwiftBook
Констреинты 100%
источник

AO

Alex Oliinyk in SwiftBook
Начни учить интерфейс. Например, я прошелся по ютубу по UIKit элементам, потом открыл туториал с приложениями и делал по видео, потом уже придумал сам, что хочу сделать и делал. Алгоритмы и паттерны уже в последнюю очередь как начнешь делать пэт проэкт можно подумать как впихнуть. Алгоритмы вообще тебе еще долго не понадобятся. Хотя для общего развития конечно полезно было бы иметь в стэке.
источник

d

developer in SwiftBook
Благодарю за ваш совет 🙌🏼
источник

AO

Alex Oliinyk in SwiftBook
Но не зацикливайся, половину элементов все равно забудешь. Чисто что б знал, какие в UIKit есть. А потом уже в туториалах поймешь связь между UIKit и Swift, и уже тогда сам сможешь начинать играться.
источник

d

developer in SwiftBook
Хорошо
источник

НС

Николай Савенков... in SwiftBook
Подскажите может кто-то делал измеритель шума, или кто-то знает хороший туториал по данному вопросу, всем спасибо за подсказки.
источник

РС

Руслан Садыков... in SwiftBook
Как отобразить новое vc в дочернем vc? ОН выдает ошибку, якобы controller уже презентован, но это не так
источник

AK

Anna Kosss in SwiftBook
покажите, как делаете
источник

РС

Руслан Садыков... in SwiftBook
Вот так добавляю дочерний контроллер
источник

РС

Руслан Садыков... in SwiftBook
Вот так в дочернем контроллере пытаюсь презентовать новый
источник