我正在尝试将其整合GKGameSession
到我的 Game Center 游戏中。我尝试了以下代码的几种组合:异步运行命令,将它们链接到完成处理程序中,等等。每次我看到相同的结果时:我可以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 获取和数据保存。
我在这里做错了吗?