通过游戏中心发送 NSString

2023-12-30

我想通过 Gamecenter 将 NSString 从另一台 iPhone/iPad 发送到另一台 iPhone/iPad 但它因 EXC_BAD_ACCESS 崩溃

在 .h 文件中

typedef enum {
    kMessageTypeRandomNumber = 0,
    kMessageTypeGameBegin,
    kMessageTypeSubmit,
    kMessageTypeExchange,
    kMessageTypePickup,
    kMessageTypePass,
    kMessageTypeGameOver
} MessageType;

typedef struct {
    MessageType messageType;
} Message;

typedef struct {
Message message;
NSString *submitTile;
} MessageSubmit;

在 .m 文件中

- (void)sendData:(NSData *)data {
    NSError *error;
    BOOL success = [[GCHelper sharedInstance].match sendDataToAllPlayers:data withDataMode:GKMatchSendDataReliable error:&error];
    if (!success) {
        CCLOG(@"Error sending init packet");
        [self matchEnded];
    }
}
-(void)sendSubmit:(NSString *) submitTile {
    MessageSubmit message;
    message.message.messageType = kMessageTypeSubmit;
    message.submitTile = submitTile;
    NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageSubmit)];    
    [self sendData:data];
}

如果我点击 CCMenu 图像,它将调用 onSubmit 函数 这是 onSubmit 函数

-(void)onSubmit
{
    NSString *submitStr = @"1-7-7 =-7-8 1-7-9";

    [self sendSubmit:submitStr];
}

最后一个是didReceiveData方法

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID {
    if (message->messageType == kMessageTypeSubmit) {
        MessageSubmit * messageSubmit = (MessageSubmit *) [data bytes];
        NSString *submitStr = messageSubmit->submitTile;

        NSLog(@"SubTile %@",submitStr);
    }
}

它有 EXC_BAD_ACCESS 在线NSString *submitStr = messageSubmit->submitTile;.

有没有办法通过 iPhone/iPad 发送 NSString 消息?


你不能这样做:

NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageSubmit)];    

...或这个:

MessageSubmit * messageSubmit = (MessageSubmit *) [data bytes];

一般来说,您不能只按原样发送对象的内存中表示形式。例如,submitTile该类的实例变量是一个指向NSString目的。当您通过网络发送数据时,您不是在发送字符串本身,而是在发送指针 - 这只是发送设备上的一块内存的内存地址。接收设备不会在任何地方存储相同的字符串,即使有,它也不会有相同的内存地址。所以你有一个无意义的指针指向任何地方,并且你期望它指向一个不存在的字符串。

做你想做的事最简单的方法就是让你的MessageSubmit class NSCoding- 符合。将其序列化为NSData而不仅仅是复制字节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过游戏中心发送 NSString 的相关文章

随机推荐

  • 检测 Mono 中的符号链接和管道

    有没有办法使用 C 和 Mono 来区分特殊文件 例如符号链接和管道 该应用程序是一个多平台备份工具 因此我想避免使用互操作库或 C DLL 并寻找直接托管代码解决方案 经过更多研究后 我找到了解决方案 添加参考MonoPosix项目可以访
  • 图像未保存在文件夹中

    我正在尝试创建一个文件夹并在其中保存图像 但这不起作用 我不知道我的代码出了什么问题 你能告诉我为什么吗 The method that invoke of uploading images public void openGallery
  • 将 QLineEdit 设置为仅接受数字

    我有一个QLineEdit用户应仅输入数字 那么是否有一个仅限数字的设置QLineEdit QLineEdit setValidator 例如 myLineEdit gt setValidator new QIntValidator 0 1
  • Microsoft 的 CodeView 格式规范

    我一直在寻找 1990 年代的 Microsoft 文档 名为CodeView 符号调试信息规范 微软在他们的文章中引用了它PE COFF规格 http elfz laacz lv ms exe spec html L61 关于该文档的信息
  • 如何通过VSTS构建和部署SSRS项目?

    我在 VS2015 中创建了简单的 SSRS 项目 我想通过创建构建定义和发布定义步骤来使用 VSTS 构建和部署 SSRS 项目 是否有任何第三方 VSTS 扩展可用 或者对于 SSRS 构建和 SSRS 部署与 SSIS 构建和 SSI
  • 子类化流

    我有兴趣创建自己的 Stream 子类 并且想知道应该重写哪些方法 部署在 pharo 和 Gemstone 上 我有一个包含各种类型事物的集合 我希望能够流式传输它的子集 其中包含类的元素 我不想复制集合或使用collect 块 因为集合
  • 在 CAB 中部署 C# ActiveX 以供 Internet Explorer 使用

    我正在拼命尝试部署一个用 C 开发的 IE 的 ActiveX 作为 CAB 存档 我阅读了很多资源 其中一些来自 StackOverflow 似乎很多人都遇到了同样的问题 我尝试了 3 种解决方案 a 创建 CAB VS 项目 b 使用手
  • SQL Server 2005:读提交事务隔离级别中的键范围锁?

    我正在帮助解决使用 SQL Server 2005 的 NET 应用程序中的一些死锁问题 我从下面的跟踪中获得了 XML 数据 真正让我困惑的是 RangeX X 锁定PK Exp Experience PriorFirm当事务隔离级别为读
  • Android 图像的 AES 加密/解密

    我需要找到一种在 Android 中加密 解密图像的方法 我是 Android 编程新手 从未在任何其他平台上加密 解密过 所以请给我一个很好的例子 因为我需要学习如何做到这一点 我正在开发一个需要加密 解密图像的项目 如果您能帮助我解决这
  • 如何在Excel中使用vba访问xml中的特定元素和属性?

    我正在努力让 Excel 解析 xml 文件 我找到了大量的示例 但似乎没有一个完全符合我的要求 而且我似乎无法克服错误 对象变量或未设置块变量 该 xml 格式良好 如下所示
  • 如何在绘图上绘制带注释的热图?

    我正在尝试制作一个带注释的热图 import plotly plotly as py import plotly tools as tls from plotly graph objs import import numpy as np i
  • PHP 单行语句中的 Netbeans 代码格式大括号

    Intro 我正在开发 PHPNetBeans IDE 7 2 Build 201207171143 我喜欢formatting以我的自定义格式清理我的代码 目前我与同事在一个小组中工作 我的一些同事习惯于编写不带大括号的单行语句 我认为这
  • 将 C 字符串转换为双精度数或从双精度数转换时出现奇怪的行为

    我无法理解 C 的规则 即在打印双精度数或将字符串转换为双精度数时应采用何种精度 下面的程序应该可以说明我的观点 include
  • 视图控制器有时收不到 NSNotification

    所以 我只是在各种情况下测试 NSNotifications 而这个令人困惑 如果您能帮助我理解 NSNotifications 我将不胜感激 我有一个导航控制器 我有一个名为 Add 的 UIBarButtonItem 它发布通知 Did
  • PHP regex - 检测未闭合的括号

    我需要检测字符串是否包含任何未闭合的尖括号 我试图通过比较左括号和右括号的数量来避免使用正则表达式 if substr count string lt substr count string gt Text contains unclose
  • python字节码中的加载名称和加载全局有什么区别?

    load name 接受其参数 并将 store name 存储的名称值推入堆栈 该值由参数指示的位置存储 load global 做了类似的事情 但字节码中似乎没有 store global 那么有什么区别以及如何加载全局工作 和 之间的
  • 在 LLDB 中保存断点

    如何在 lldb 中保存断点 这是 gdb 具有的功能 我怀疑 lldb 也具有它 但我无法在帮助中找到它 这是如何在 gdb 中完成的 让 gdb 保存断点列表 https stackoverflow com questions 5014
  • 社交图标无法与 WordPress 上的无限滚动一起使用

    我们正在为工作中的客户制作一个网站 可以在这里找到 http ethercreative net studio social http ethercreative net studio social 这是一个非常简单的 WordPress
  • UITableViewCell:允许选择性删除

    我有一个表视图并希望允许对所有单元格重新排序 但是我不希望删除某些单元格 当 UiTableView 进入删除模式时 我不希望红色 按钮出现在左侧 并且不希望滑动手势调出这些单元格的 删除 按钮 但希望其他单元格也出现这种情况 有任何想法吗
  • 通过游戏中心发送 NSString

    我想通过 Gamecenter 将 NSString 从另一台 iPhone iPad 发送到另一台 iPhone iPad 但它因 EXC BAD ACCESS 崩溃 在 h 文件中 typedef enum kMessageTypeRa