I am using a property setters and didSet() values to set a "percent complete" property. All property access is done in the main queue, the property I am setting has no hooks or getters or setters, the object is fully initialized, and the fields I am using in the calculation are all there.
However, I am getting an infuriating EXC_BREAKPOINT error with no other details.
I suppose it's possible that this is a multithreaded access problem, but I see only empty stacks in all of the other threads.
Call Stack (these are all set or didSet):
You are getting an integer overflow because you are multiplying 22,667,272 by 99. Use Int64 rather than Int.
The largest value you can store in a 32 bit integer is 2,147,483,647. 22,667,272 * 99 is 2,244,059,928, so you get an integer overflow. The size of an
Int will vary from architecture to architecture, so your code will work on a 64 bit device but not on a 32 bit. If you use Int64 explicitly you will avoid the overflow.
let totalBytes = Int64(self.bytesTotal) let uploaded = Int64(self.bytesUploaded) self.percentComplete = Int(1 + 99 * uploaded / totalBytes)