【发布时间】:2012-06-25 17:41:21
【问题描述】:
虽然我曾使用过 Java、C 和 C++,但我对 Objective-C 还比较陌生,而且我还在学习 Objective-C。
我有一个套接字、一个接收数据函数和一个文本视图。当数据进来时,我想将它附加到文本视图中。现在我的 textview 在开始时有一些预填充的文本。如果在每次调用接收数据的数据时,我只获取文本视图的当前文本,将其附加到 nsstring 中:
NSString *oldtext = [mTextViewAlias text];
NSString *toSend = [oldtext stringByAppendingString: oldtext];
然后将文本视图设置为toSend,它工作正常,我看到我的文本视图中的数据增长了。
问题是,我想追加:
UInt8 buffer[len]; // which has data from the socket. len is set to amount of data on each call of receive data as follows
int len = CFDataGetLength(df);
我一直在尝试做的是将缓冲区转换为nsstring 并追加。例如:
NSString *newdata = [NSString stringWithUTF8String: buffer];
我想到缓冲区可能不会以 '\0' 字符终止,因此我什至创建了一个名为 char newbuffer[len+1]; 的新缓冲区,并将缓冲区复制到其中并添加了 \0 作为最后一个字符。
我可以在第一次传递新数据时追加第一次,但第二次追加,追加到将缓冲区中的字符追加到文本一次之前总是崩溃的内容。
我在if len > 10 assign buffer[10]='\0' 处做了一个小技巧。它实际上让我在第三次崩溃之前抓取了两次数据。
我似乎遇到了两个问题之一,但我不确定如何解决它。一个是我只能抓取缓冲区中的数据,并且不知何故这些nsstrings 依赖于它,当我在接收数据时更改缓冲区时,再次调用它会导致崩溃。或者也许它仍然是'\0' 不存在的问题,尽管我不知道如何。
【问题讨论】:
-
使用 NSMutableData 类作为缓冲区而不是纯 C 数组可能会更好。当我为 Obj-C 编程时,我尝试将其全部保留为 Obj-C,因为转换可能会有点麻烦。我将不得不查找有关某些内容的文档,然后我可能会为您提供实际的答案
-
您介意显示从套接字接收数据的代码和/或函数吗?您是否仅将其作为 C 数组接收?我还假设您不只是从 URL 获取数据,因为 API 中有非常好的函数可以自动为您完成。
-
这是一个更像 telnet 的套接字。该连接用于聊天和游戏服务器,但它有一些格式,您可以打开它来组织原始提要,但它仍然发送原始文本,我只知道如何使用格式更好地组织它。得到这样的东西:CFDataGetBytes(df, range, buffer);
标签: ios objective-c nsstring uitextview