2016-07-30 2 views
0

Я использую средства определения свойств и значения didSet(), чтобы установить свойство «percent complete». Весь доступ к свойствам выполняется в основной очереди, свойство, которое у меня установлено, не имеет крючков, геттеров или сеттеров, объект полностью инициализирован, и поля, которые я использую при расчете, все есть.Быстрое приложение сбой при настройке свойства в главной очереди

Тем не менее, я получаю бешеную ошибку EXC_BREAKPOINT без каких-либо других подробностей.

Возможно, это проблема многопоточного доступа, но я вижу только пустые стеки во всех других потоках.

Ошибка Breakpoint:

Error Breakpoint

Debugger Значения:

Both fields populated

Call Stack (все они установлены или didSet):

enter image description here

+0

Вы пытались установить там что-нибудь еще? как только 1, чтобы поиграть с ним? –

+0

Что произойдет, если нажать кнопку продолжить? В более ранних версиях Xcode я иногда видел точки останова «призрак», которые не были указаны в среде IDE, но если вы перешли в командную строку и указали точки останова, они показали их. Мне пришлось использовать командную строку для удаления ненужных точек останова. (Это произошло, когда я добавил точки останова в IDE, а затем попытался удалить их.) Однако я не видел этого для нескольких версий. –

+0

@ DuncanC, продолжающий выполнение, ничего не делает - он остается в одной точке. – JustinHK

ответ

3

Вы получаете переполнение целых чисел, потому что умножаете 22,667,272 на 99. Используйте Int64, а не Int.

Наибольшее значение, которое вы можете сохранить в 32-битном целом, равно 2 147 483 647. 22,667,272 * 99 - 2,244,059,928, поэтому вы получаете переполнение целых чисел. Размер Int будет отличаться от архитектуры к архитектуре, поэтому ваш код будет работать на 64-битном устройстве, но не на 32-битном. Если вы используете Int64 явно, вы избежите переполнения.

let totalBytes = Int64(self.bytesTotal) 
let uploaded = Int64(self.bytesUploaded) 

self.percentComplete = Int(1 + 99 * uploaded/totalBytes) 
+0

Ничего себе, я сейчас чувствую себя глупо! Я мог бы просто использовать float для подразделения. – JustinHK

+0

Да. Это тоже сработает – Paulw11

Смежные вопросы