0

虽然我曾在 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);

我一直在尝试做的是将缓冲区转换为 ansstring并追加。例如:

NSString *newdata = [NSString stringWithUTF8String: buffer];

我突然想到缓冲区可能不会以'\0'字符终止,所以我什至创建了一个名为 char 的新缓冲区newbuffer[len+1];并将缓冲区复制到其中并添加 a\0作为最后一个字符。

我可以在第一次传递新数据时追加第一次,但第二次追加,追加到之前总是崩溃之前将缓冲区中的字符追加到文本的内容。

我在哪里做了一个小技巧if len > 10 assign buffer[10]='\0'。它实际上让我在第三次崩溃之前抓取了两次数据。

看来我有两个问题之一,我不知道如何解决它。一个是我只能抓取缓冲区中的数据,并且这些nsstring数据取决于它,当我在接收数据时更改缓冲区时,再次调用它会导致崩溃。或者也许它仍然是一个问题,'\0'虽然我不知道如何仍然不在那里。

4

1 回答 1

0

尝试这样的事情:

NSMutableData *buffer = [[NSMutableData alloc] init];
[buffer appendBytes:aCArray length:lengthOfaCArray];
NSString *newdata = [[NSString alloc] initWithData: buffer encoding:NSASCIIStringEncoding];

//When your finished with newdata and buffer, dont forget to release it
//This might be done automatically if you have Automatic Reference Counting (ARC) on
[newdata release];
[buffer release];

此处编码类型的完整参考。不能保证这会有效,因为我是从 Windows 机器上编写这段代码的,并且在 Apple 的开发人员网站上打开了几个选项卡。但应该可以帮助您朝着正确的方向前进。

于 2012-06-23T21:21:07.480 回答