2017-06-11 5 views
0

私が言ったように、変数を宣言するとエラーが発生します。 GoogleやSwiftのドキュメントでは解決策が見つからない。 HERESにコード:変数を宣言するときにEXC_BAD_ACCESS

class Database { 
static let si = Database() // when removed it also resolves into an error 

init() { 
    print("Hello") // isn't printed. 
    self.setONs() // see code below to see where collected gets a new value 
    print("current device id: \(UIDevice.current.identifierForVendor!.uuidString)") // resolves into an error when declared as uuid which is now "TestUID" 
} 

var uuid: String = "TestUID" // its actual the device id. 
var gkid: String = "" // GKPlayerID 
var collected: [String : [String : Int]] = [:] // <- Thread 1: EXC_BAD_ACCESS(code=2,address=0x7fff59de4f8) 
private var collectedProgress: [String : [String : Int]] = [:] 

私はcollectedProgressを削除した場合、悪いのアクセスがcollectedProgressで発生します。両方の変数は宣言されていて、書き込まれたり読み込まれたりすることはありません。 collectProgress変数も削除しても、次の変数は同じエラーが発生します。

+0

私はこれを再現することはできません - あなたは[MCVE]に問題をダウンしようとすると、沸騰してくださいだろうか? (あなたが走っているSwiftのバージョンを教えてください) – Hamish

+0

私はそれを最小限に抑えようとします。 https://github.com/Aritmetic/Primalこれはまだプロジェクト全体です。何かをする前にエラーが止まるので、サーバーをセットアップする必要はありません。 – Aritmetic

答えて

0

は私が問題を解決しました。私はこれがエラーだったが、今はEXC_BAD_ACCESSがないなら100%確信していません。 Database()にsharedInstanceを追加し、他のクラス/オブジェクトのDatabase()をDatabase.sharedInstanceに置き換えました。すべてのオブジェクトが同じオブジェクトを使用するようになりました。 データベースの受信者(SocketIOManager.sharedInstance.on( ""){})が問題になる可能性があります。彼らは変数といくつかの新しい値を受け取って以来、しかし、彼らはエラーをコメントした場所でも発生しました。 あなたのコードと同じエラー/問題が発生しないことを願っています。

ありがとうございます。

Fixed code on Github

0

2つの変数が収集され、収集されました進行状況が正しく設定されていません。 collectedは、文字列キーと値が[String:Int]の辞書ですが、[Any:Any]の辞書で初期化しようとしています。なぜそれがコンパイルされるのかわからない。

これにコードを変更してみてください:

var collected = [String : [String : Int]]() 
private var collectedProgress = [String : [String : Int]]() 

そのコードでは、これらの変数の初期値を作成して、自動的にそのタイプのデータ型をコンパイラ図を出してみましょう。

はまた、あなたの[String : [String : Int]タイプのtypealiasを作成することもできます:

typealias DictOfDicts = [String : [String : Int]] 

//... 

var collected = DictOfDicts() 
private var collectedProgress = DictOfDicts() 
+0

'[:]'は*ではない* '[Any Any Any]' - 辞書リテラルで、 '[String:[String:Int]]'であると、OPのコードは完全に合法です。 – Hamish

+0

'[:]'の性質を訂正してくれてありがとう。しかし、事実は、OPコードがクラッシュし、私の変更によってクラッシュしなくなったということです。 –

+0

非常に奇妙です。最初にOPコードをプレイグラウンドにコピーしたとき、私は同じエラーが出ましたが、今度は戻して、それ以上はクラッシュしません。 –

関連する問題