- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 GameKit 开发多人 Swift (XCode 7.3/iOS 9.2) 游戏。
我使用自定义结构作为通过 GameKit 发送的信息。该结构的副本如下。 frustnessNetworkMessage 是一个 String 枚举 & Card 是一个单独的类(如果需要可以发布代码)
struct frustrationNetworkMessage {
var messageType : FrustrationNetworkMessageType
var cards : [Card]
var actingPlayer : String
init(messageType : FrustrationNetworkMessageType, cards : [Card], actingPlayer : String) {
self.messageType = messageType
self.cards = cards
self.actingPlayer = actingPlayer
}
我的问题出在 'match(match: GKMatch, didReceiveData data: NSData, fromRemotePlayer player: GKPlayer)' 方法中。我已经知道一旦收到一些数据就会调用它:
private var receivedData : NSMutableData
func decode<T>(data: NSData) -> T {
let pointer = UnsafeMutablePointer<T>.alloc(sizeof(T.Type))
data.getBytes(pointer, length: sizeof(T))
return pointer.move()
}
func match(match: GKMatch, didReceiveData data: NSData, fromRemotePlayer player: GKPlayer) {
print("Match / did receive data: size of data - \(sizeofValue(data))")
receivedData.appendData(data)
if let receivedNetworkMessage : frustrationNetworkMessage = decode(receivedData) {
print("Match / did receive data: \(receivedNetworkMessage.messageDetails())")
当我运行上面的代码时,它在带有 EXC_BAD_ACCESS 的最终打印语句处崩溃(我的理解是它提示它正在尝试访问尚未收到的结构部分)。
举个例子:
已发送消息摘要 -> sendNetworkMessage:消息类型:startNewGame with actingPlayer:G:118279601 & 卡数:1 - 消息大小:40
消息长度第一次匹配 didReceiveData 被调用 -> 匹配/接收数据:数据大小 - 8
如何在对结构进行操作之前检查是否已获取整个结构?我曾想过更新结构以包含一个长度字段(理论上我应该总是一次性收到它 - 所以可以用它来检查数据包长度)。
最佳答案
您可以使用这样的后台进程来持续检查您的数据结构吗?
newQueue = NSOperationQueue()
let operation2 = NSBlockOperation(block: {
})
operation2.completionBlock = {
print("Operation 2 completed")
}
let operation1 = NSBlockOperation(block: {
})
operation1.completionBlock = {
self.newQueue.addOperation(operation2)
}
operation1.qualityOfService = .UserInitiated
newQueue.addOperation(operation1)
}
初始化变量,然后检查它们的长度;这将保存/阻止它崩溃。
关于ios - 检查已通过 GKMatchDelegate didReceiveData 接收到整个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36346952/
我正在使用 GameKit 开发多人 Swift (XCode 7.3/iOS 9.2) 游戏。 我使用自定义结构作为通过 GameKit 发送的信息。该结构的副本如下。 frustnessNetwo
我的代码中有这个函数: func match(match: GKMatch, player playerID: String, didChangeState state: GKPlayerConnec
我是一名优秀的程序员,十分优秀!