iOS:通过蓝牙的 NSString 然后转换为选择器,失败
好的 - 我正在使用 iOS GameKit 进行一个简单的实验。步骤如下:
-1。我在 iPad1 上有一个 NSString 'myFunction'。
-2。我通过 GameKit 与 iPad2 的蓝牙连接进行拍摄。编码为 NSASCIIStringEncoding。
-3。 iPad2 收到消息。
-4。 iPad2 从收到的数据中获取字符串“myFunction”,并将其记录到调试器中,以便我可以判断它是否成功。它使用 NSASCIIStringEncoding 进行解码。到目前为止还不错。
-5。我使用 NSSelectorFromString() 将“myFunction”转换为选择器。
-6。我在实现 -(void)myFunction{}
的对象上执行选择器 -7。 iPad2 崩溃,抱怨无法在对象上找到函数 myFunction。
现在,如果我在第 5 步将字符串 'myFunction' 硬编码到 NSSelectorFromString() 中,它就会完美地工作。我直觉地知道这是一些编码问题。我尝试使用 NSUTF8StringEncoding 对字符串进行编码,但不仅程序仍然崩溃,而且字符串在步骤 4 中被记录为 null。
我浏览了 NSString 类参考中所有对字符串进行编码的无数方法,
http://developer .apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#
但在我依次尝试其中每一个,看看什么粘在墙上之前,我想知道是否有其他人尝试过做像我正在尝试的事情;通过蓝牙发送字符串以转换为另一侧的选择器并执行。
Ok- I'm running a simple experiment with iOS GameKit. The steps are these:
-1. I have a NSString 'myFunction' on iPad1.
-2. I shoot it over a bluetooth connection with GameKit to iPad2. Encoding is NSASCIIStringEncoding.
-3. iPad2 receives the message.
-4. iPad2 gets the string 'myFunction' from the data it received, and logs it to the debugger so that I can tell it came through alright. It is decoded using NSASCIIStringEncoding. Good so far.
-5. I convert 'myFunction' to a selector using NSSelectorFromString().
-6. I perform the selector on an object which implements -(void)myFunction{}
-7. iPad2 crashes complaining about not being able to find the function myFunction on the object.
Now, if I hard-code the string 'myFunction' into NSSelectorFromString() on step 5, it works beautifully. I know in my gut this is some encoding problem. I tried encoding the string with NSUTF8StringEncoding, but then not only does the program still crash, but the string is logged as null in step 4.
I looked through all the myriad ways to encode strings in the NSString class reference,
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#
But before I try each one of them in turn to see what sticks to the wall, I was wondering if anyone else has tried to do something like what I'm trying; sending strings over bluetooth to be converted to selectors on the other side and performed.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您必须序列化并发送数据。
看看这是否有帮助
you will have to serialize and send the data.
See if this helps