2014-07-07 1 views
1

내 클래스는사전 updateValue에는 빠른 컴파일러 세분화

var activeSquares = Dictionary <String, SKShapeNode>() 

내가 추가하고 사전에 갱신 값은 내가

를 사용하는 경우 나 또한 같은 충돌을 얻을

let squareNode = SKShapeNode(rectOfSize: CGSizeMake(80, 80), cornerRadius: 8) 
activeSquares.updateValue(squareNode, forKey: "someUniqueDescription") 

를 사용하려고 속성을 가지고 결함의 원인

activeSquares["someUniqueDescription"] = squareNode 

그러나 컴파일 할 때 크래시가 발생합니다.

1. While emitting IR SIL function @_TFC14gamename9GameScene11addedSquarefS0_FCS_6SquareT_ for 'addedSquare' at /.../gamename/gamename/GameScene.swift:30:5 
<unknown>:0: error: unable to execute command: Segmentation fault: 11 
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation) 
Command /Applications/Xcode6-Beta2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254 

어떻게하면 키/값 쌍을 사전에 추가/업데이트하기 위해 updateValue를 올바르게 사용할 수 있습니까?

+5

Xcode6 베타 3으로 업데이트하는 것이 좋습니다. (컴파일러가 segfault해서는 안되기 때문입니다) – Jiaaro

답변

0

내 솔루션이 여기에 맞는지 확실하지 않지만 도움이 될 수 있습니다. NSDictionary 구독에 이상한 무언가가있는 것 같습니다. 이유는 모르겠지만, 다음과 같이 정의 아니에요 : 내가 잘못 아니에요 경우는 선택 사항 암시 적으로 풀어 반환하지만 키에 대한 값이 없을 수 있기까지, 선택 반환해야합니다,

func objectForKeyedSubscript(key: NSCopying!) -> AnyObject! 

때문에. 당신이 작성하려고하는 경우 :

if(dictionary["key"] != nil) 

당신은 당신이 쓰는 경우 동안 "AnyObject가 UINT8로 변환되지 않습니다"컴파일 오류가 발생합니다 : 당신이 하나를 얻을하지 않습니다

if(dictionary["key"]) 

.

나는이 문제가 지금, 옵션 랩 해제를 사용하고 해결 방법 :

if(someBool && dictionary["key"]) // fine in beta 2, crash in beta 3-4 

// turned to: 

var hasValueForKey = false 
if dictionary["key"] 
{ 
    hasValueForKey = true 
} 
if(someBool && hasValueForKey) // fine in beta 4 

과 :

내가 첨자를 통해 객체를 설정하기위한 선택적 항목 뭔가 물건이있을 수 있습니다 생각
var someArray : NSArray? = dictionary["key"]? as? NSArray // note ? after [] 

,

선택 해제 된 랩핑으로 재생하면 어쩌면 그녀를 도울 수 있습니다. 전자뿐만 아니라.

관련 문제