2016-11-25 6 views
1

iPhone 5シミュレータでコードを実行すると、画像に示されている例外がスローされます。 他のシミュレータでコードを実行するだけでも問題ありません。iPhone 5シミュレータでのみEXC_BAD_INSTRUCTION

このコードでは、私が間違っていた箇所を特定できません。 誰かにこの問題がありますか? (スイフトでIntの型の別名である)

Exception shown in XCode

NSInteger
+0

NSDate()の代わりに 'Date()'を使用した場合の結果は同じですか? –

+1

実際、そのコードはかなり壮大です。なぜスウィフトのNSIntegerについて言及していますか?または、これがSwift 3ならNSDateに? – matt

+0

また、「user!」とは「クラッシュ・ミー」を意味します。問題がどこにあるのではないと思っても、 'user'が' nil'でないことを確認できないのはちょうど愚かです。 – matt

答えて

2

5. が

NSInteger(NSDate().timeIntervalSince1970) * 1000 

の結果はiPhoneのような32ビット・プラットフォーム上の32ビット 整数であります1480106653342(現時点では) の範囲-2^31 ... 2^31-1の32ビット(符号付き)整数には当てはまりません。 したがって、Swiftは実行を中止します。 (あなたは、具体的&*よう 「オーバーフロー」の演算子を使用しない限り、それは、いくつかの 他のプログラミング言語で行われているようスウィフトが 整数演算の結果を「切り捨て」しません。)

あなたは64のためにInt64を使用することができますすべてプラットフォーム上でビット演算:お使いの場合には

Int64(NSDate().timeIntervalSince1970 * 1000) 

、文字列が必要な場合:

let lastLogin = String(Int64(NSDate().timeIntervalSince1970 * 1000)) 
+0

32ビット版と64ビット版のプラットフォームについては分かりませんでしたが、試してみます – Dreanaught

+0

プラットフォームの違いを教えていただきありがとうございます。それは私になぜそれが動作しないことを明らかにした。私たちの与えられた提案を使用しても、firebaseは最初のInt64のようなものではないので、私を助けませんでした。エポック(1970年)以来のミリ秒を得るには、NSDate()を思いついた。timeIntervalSince1970 * 1000 – Dreanaught

+0

@Dreanaught:元のコードと同じように、文字列に変換することができます。 –

関連する問題