0

私はJava、C、およびC ++で作業したことがあり、Objective-Cをまだ学んでいますが、Objective-Cは初めてです。

ソケット、データ受信機能、テキストビューがあります。データが入ってくると、それをテキストビューに追加したいと思います。これで、私のテキストビューの最初にいくつかのテキストが事前に入力されています。データを受信するためのすべての呼び出しで、データが入ってくる場合は、テキストビューの現在のテキストを取得し、それを次のように追加します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て、最後の文字としてaを追加しました。

新しいデータの最初のパスで最初に追加できますが、2番目の追加は、バッファからの文字がテキストに追加されたものに追加すると、常にクラッシュします。

私はどこで少しトリックをしましたif len > 10 assign buffer[10]='\0'。そして、実際には、3回目のクラッシュの前に、2回データを取得することができました。

2つの問題のうちの1つが発生しているようで、修正方法がわかりません。1つは、バッファ内のデータと同じ数のデータしか取得できず、どういうわけかこれら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 に答える