Closed CiraciNicolo closed 2 years ago
@iStopped Ye same issues here. Did you end up getting around this one?
@iStopped So far this has been working:
open func getContactsBolts() -> [BFTask<CNContact>] {
let task = BFTaskCompletionSource<AnyObject>()
getContactsAsync( {(contacts: [CNContact], error) in
if (error == nil) {
task.setResult(contacts as [CNContact] as AnyObject?)
} else {
task.setError(error!)
}
})
let sendi: AnyObject = task.task
return sendi as! [BFTask<CNContact>]
}
var tasks = [BFTask<AnyObject>]()
let allTask = BFTask(forCompletionOfAllTasks: tasks)
does not work...
I'm having this issue with parse-sdk. I've written an ugly method that accept a closure that almost works without huge modifications.
static func resolverQueriesInBackground(_ queries: [PFQuery<PFObject>], completionBlock: @escaping (BFTask<AnyObject>) -> Void) {
DispatchQueue(label: "dataProvider").async {
let queue = OperationQueue()
var succed = true
var results: [[PFObject]] = []
queries.forEach { (query) in
queue.addOperation({
do {
let result = try query.findObjects()
results.append(result)
}
catch _ as NSError {
succed = false
}
})
}
queue.waitUntilAllOperationsAreFinished()
if succed {
let task = BFTask<AnyObject>(result: results as AnyObject)
_ = completionBlock(task)
}
else {
let error = NSError(domain: "kDataProviderDomain", code: 0, userInfo: nil)
let task = BFTask<AnyObject>(error: error)
_ = completionBlock(task)
}
}
}
I figured out something ugly but it looks like it works
var tasks = [BFTask<AnyObject>]()
BFTask<AnyObject>(forCompletionOfAllTasksWithResults: tasks as [BFTask<AnyObject>]?).continue({ task -> Any? in
print(task.result)
})
I'm using Bolts with the Parse SDK on a swift3 project, the issue is relative to Bolts I suppose. I've an array of BFTask and using BFTask(forCompletionOfAllTasksWithResults: tasks) I get the following error:
Any ideas how to fix this?