我正在尝试将GKGameSession融入我的游戏中心游戏中。我尝试了以下几种代码的组合:异步运行命令,将它们链接到完成处理程序中,等等。每次我看到相同的结果:我可以使用saveData非常好的,直到调用了getShareURLWithCompletionHandler为止。之后,任何对saveData的尝试都会引发错误。
下面是显示问题的最简单的代码版本:
CKContainer *defaultContainer = [CKContainer defaultContainer];
[GKGameSession createSessionInContainer:defaultContainer.containerIdentifier
withTitle:@"temp title"
maxConnectedPlayers:4
completionHandler:^(GKGameSession * _Nullable session, NSError * _Nullable error)
{
if (error)
{
[self printError:error];
}
[session getShareURLWithCompletionHandler:^(NSURL * _Nullable url, NSError * _Nullable error)
{
if (error)
{
[self printError:error];
}
}];
NSData *newData = [NSData dataWithBytesNoCopy:@"abcdefghijklmnopqrstuvwxyz" length:26];
[reSession saveData:newData completionHandler:^(NSData * _Nullable conflictingData, NSError * _Nullable error)
{
if (error)
{
[self printError:error];
}
}];
}];在大多数情况下,saveData调用只是崩溃:
malloc: *** error for object 0x32df14: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug但有时它会抛出一个错误:
GKGameSessionErrorDomain:GKGameSessionErrorUnknown我试过保存不同类型的数据。我尝试通过链接完成处理程序中的所有调用来依次进行调用。我尝试过在creationSession完成处理程序的内部和外部执行URL和数据保存。
我在这里做错什么了吗?
发布于 2017-02-01 00:26:03
我也看到了同样的情况,但有一个更有用的错误:
无法完成请求的操作,因为会话已在服务器上更新,从而导致冲突。
save文档说,
应由开发人员决定如何处理保存冲突。
不过,在这里,每次重试保存都会失败,永远失败。所以是的,这就是你所处的状态。
然而,当加入游戏的玩家进入他们设备上的URL时,他们的GKGameSessionEventListener's didAddPlayer:就会被调用,然后如果他们保存.他们会得到同样的冲突错误,但是如果他们重新尝试保存.这是有效的!
创建链接的玩家被锁定在保存或更新游戏状态之外,直到加入玩家已经更新了数据。当另一个播放机保存时,原始播放机将在session:player:didSave:上调用GKGameSessionEventListener。
此时,原始玩家可以按预期保存。
发布于 2016-12-06 17:17:55
你应该把一个街区放进另一个街区。因为块可以按任何顺序完成。
我有这样的工作代码:
NSData *newData = [NSData dataWithBytesNoCopy:@"abcdefghijklmnopqrstuvwxyz" length:26];
[reSession saveData:newData completionHandler:^(NSData * _Nullable conflictingData, NSError * _Nullable error)
{
if (error)
{
[self printError:error];
} else {
[session getShareURLWithCompletionHandler:^(NSURL * _Nullable url, NSError * _Nullable error)
{
if (error)
{
[self printError:error];
}
}];}];
https://stackoverflow.com/questions/40300104
复制相似问题