When I run this following function subscribe
, with the following main procedure, the desired effect is to pass in a list by reference, and allow the synchronous(or asynchronous) procedure to append elements to the back of the list, acting as a data feed:
// Main procedure
override func viewDidLoad() {
super.viewDidLoad()
var queue : [String] = []
subscribe(prefix: "weight", dataFeed: &queue) // calling procedure here
}
// Function where the error is occuring
func subscribe(prefix : String, dataFeed : inout [String]){
ParticleCloud.sharedInstance().subscribeToAllEvents(withPrefix: prefix, handler: { (eventOpt :ParticleEvent?, error : Error?) in
if let _ = error {
eprint (message: "could not subscribe to events")
} else {
DispatchQueue.main.sync(execute: {
if let event = eventOpt{
if let eventData = event.data {
eprint(message: "got event with data \(eventData)")
dataFeed.append(eventData) // EXC_BAD_ACCESS (code=1, ...)
}
}
})
}
})
}
Below is a slightly abstracted version(since it uses a specific API that requires username and password to replicate) of the code that is currently causing trouble:
// Function where the error is occuring
func foo(prefix : String, dataFeed : inout [String]){
API.call(withPrefix: prefix, handler: { (eventOpt :Event?, error : Error?) in
if let _ = error {
print("error!")
} else {
DispatchQueue.main.sync(execute: {
if let event = eventOpt{
if let eventData = event.data {
dataFeed.append(eventData) // EXC_BAD_ACCESS (code=1, ...)
}
}
})
}
})
}
Does anyone know why I'm getting the EXC_BAD_ACCESS (code=1, ...)
error here?