私は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'
方法がわかりませんが、まだそこにいないという問題なのかもしれません。