我是Objective-C的新手,虽然我曾在Java,C和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
as最后一个角色。
我可以在新数据的第一次传递时第一次附加,但是第二次附加,附加到缓冲区中附加到缓冲区的字符的内容,然后总是崩溃。
我在if len > 10 assign buffer[10]='\0'
处做了一个小技巧。它实际上让我在第三次崩溃之前抓取数据两次。
我似乎有两个问题之一,我不知道如何解决它。一个是我只能抓取缓冲区中的数据,并且这些nsstring
以某种方式取决于它,当我在接收数据时更改缓冲区时,再次调用它会导致崩溃。或者它仍然是'\0'
仍然存在的问题,尽管我没有看到如何。
答案 0 :(得分: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];
编码类型here的完整参考。 不能保证这是有效的,因为我从Windows机器编写此代码,并在Apple的开发人员站点打开了几个选项卡。但是应该帮助你朝着正确的方向前进。