Firebase를 사용하는 iOS 응용 프로그램을 만들고 있습니다. 그러나 내 응용 프로그램의 특정 지점에서 사용자가 데이터베이스에 게시물을 업로드하면이 게시물에는 사용자가 업로드 한 사진의 Firebase 저장소 URL이 있어야합니다 . 이러한 모든 작업은 한 번에 완료되므로 URL의 사전 값에 대해 nil 값을 얻게됩니다. 프로세스가 비동기이며 한 번에 완료되므로 업로드라고하는 한 함수에서입니다. 그래서 다음 URL 값을 얻을 않는 방법 전무 값을 즉 충돌 여기Swift의 비동기 NSOperation 종속성
var queue = NSOperationQueue()
let uploadToStorageOperation = NSBlockOperation(block: {
eventImagesRef.putData(self.imageData!, metadata: metadata).observeStatus(.Success) { (snapshot) in
let downloadTxt = snapshot.metadata!.downloadURL()!.absoluteString
self.downloadURL = downloadTxt
print(self.downloadURL)
}
})
/*uploadToStorageOperation.setCompletionBlock{(
if downloadURL != nil { queue.addOperation(uploadEventOperation) }
})*/
let uploadEventOperation = NSBlockOperation(block: {
let key = self.ref.child("events").childByAutoId().key
let event: [String: AnyObject] = ["eventID": eventID,
"host": host!,
"eventDescription": self.eventDescription.text!,
"location": [ "latitude": self.latitude, "longitude": self.longitude],
"eventPhotoURL": self.downloadURL! //error is here nil value
]
let childUpdates = ["/events/\(key)": event,
"/user-events/\(host!)/\(key)": event]
self.ref.updateChildValues(childUpdates)
})
uploadEventOperation.addDependency(uploadToStorageOperation)
queue.maxConcurrentOperationCount = 1
queue.addOperations([uploadToStorageOperation,uploadEventOperation], waitUntilFinished: false)
왜 NSOperationQueue를 사용하고 있습니까? –