2016-07-30 9 views
0

プロパティのsettersおよびdidSet()の値を使用して「パーセント完了」プロパティを設定しています。すべてのプロパティへのアクセスはメインキューで行われ、設定しているプロパティにはフックやゲッターやセッターはなく、オブジェクトは完全に初期化されており、計算に使用しているフィールドはすべてそこにあります。メインキューのプロパティを設定すると、スウィフトアプリがクラッシュする

しかし、他の詳細なしで怒っているEXC_BREAKPOINTエラーが発生しています。

これはマルチスレッドアクセスの問題である可能性がありますが、他のすべてのスレッドで空のスタックしか表示されません。

エラーブレークポイント

Error Breakpoint

デバッガは値:

Both fields populated

コールスタック(これらはすべて設定されているかdidSet):

enter image description here

+0

他に何か設定しようとしましたか? 1と同じように遊ぶのが好きですか? –

+0

続行をクリックするとどうなりますか?古いバージョンのXcodeでは、IDEにリストされていなかった "ゴースト"ブレークポイントを時に見ましたが、コマンドラインに行き、ブレークポイントを列挙した場合、ブレークポイントが示されました。不要なブレークポイントを削除するには、コマンドラインを使用しなければなりませんでした。 (これはIDEでブレークポイントを追加してから削除しようとしたときに起こりました)。私はいくつかのバージョンでそれを見ていません。 –

+0

@DuncanC実行を継続することは何もしません。同じ時点にとどまります。 – JustinHK

答えて

3

整数がオーバーフローするのは、22,667,272に99を掛けているためです。IntではなくInt64を使用します。

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

うわー、今私は本当に馬鹿だと感じる!私はまた、部門のために浮きを使用することができます。 – JustinHK

+0

それも働くだろう – Paulw11

関連する問題