静的 NSStatusItem と NSStream クライアントを持つ Singleton クラスがあります。Stream でメッセージを受信するたびに、それを別のスレッドに渡して NSStatusItem toolTip を変更します。
case NSStreamEventHasBytesAvailable:
{
if(stream == inputStream)
{
//InputStream ready
uint8_t buf[1024];
unsigned int len = 0;
len = [inputStream read:buf maxLength:1024];
if(len > 0)
{
NSMutableData* data=[[NSMutableData alloc] initWithLength:0];
[data appendBytes: (const void *)buf length:len];
NSString *msgRcvd = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"Message Recieved in StreamUtil ::: %@",msgRcvd);
[self ProcessMessage:msgRcvd];
[data release];
[msgRcvd release];
}
}
break;
}
@implementation SBNSStatusItem
static SBNSStatusItem *sbNSStatusItem = NULL;
+(SBNSStatusItem *) GetSBNSStatusItem
{
@synchronized(self)
{
if (sbNSStatusItem== NULL)
{
sbNSStatusItem= [[self alloc] init];
}
}
return(sbNSStatusItem);
}
-(void) CreateNSStatusItem
{
// Initalization of NSStatusItem with NSMenu and Image setting
}
-(void) SetToolTip:(NSString *) toolTip
{
NSLog(@"%@",toolTip); // Shows Correct Message
[statusItem setToolTip:toolTip]; // But the ToolTip has some junk at the end of ori msg
//[toolTip release]; // EXC_BAD_ACCESS
}
@end
ここで、Threadfrom StreaUtil は、設定するメッセージを指定して setToolTip を呼び出します。しかし、2 回または 3 回の呼び出しの後、ツールチップは元のツールチップ メッセージの最後にジャンク テキストを表示し始めます。
ここで何が間違っていますか?