将数组附加到textview的文本字段时,Objective-C崩溃

时间:2012-06-23 20:50:08

标签: ios objective-c nsstring uitextview

我是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'仍然存在的问题,尽管我没有看到如何。

1 个答案:

答案 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的开发人员站点打开了几个选项卡。但是应该帮助你朝着正确的方向前进。