問題は、is_BlockがSKNodeに存在しないことです。
setValue forUndefinedKey
は、デフォルトでNSUndefinedKeyExceptionを発生させます。
サブクラスがある場合は、この機能をオーバーライドして、実行したいことを行います。
キー値のコーディングをよりよく理解するためにhttps://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.htmlを参照してください。
SKNodeにis_Blockというカスタム変数が必要な場合は、SKNodeの拡張機能を作成し、このデータを格納するプロパティを作成する必要があります。
import Foundation
import SpriteKit
import ObjectiveC
extension SKNode{
var isBlock: Bool {
get {
var key = "isBlock";
guard let block = objc_getAssociatedObject(self, &key) as? Bool
else{
print("Error");
return false
}
print("Success");
return block
}
set(newValue) {
var key = "isBlock";
print("Setting \(newValue)")
objc_setAssociatedObject(self, &key, newValue , objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
}
遊び場でのテスト:
import Foundation
import SpriteKit
import ObjectiveC
extension SKNode{
var isBlock: Bool {
get {
var key = "isBlock";
guard let block = objc_getAssociatedObject(self, &key) as? Bool
else{
print("Error");
return false
}
print("Success");
return block
}
set(newValue) {
var key = "isBlock";
print("Setting \(newValue)")
objc_setAssociatedObject(self, &key, newValue , objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
}
let a = SKNode()
let b = SKNode()
a.isBlock = false
b.isBlock = true
print ("\(a.isBlock), \(b.isBlock)")
b.isBlock = false
a.isBlock = true
print ("\(b.isBlock), \(a.isBlock)")
いただきまし通報しますか? –