0

静的 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 回の呼び出しの後、ツールチップは元のツールチップ メッセージの最後にジャンク テキストを表示し始めます。

ここで何が間違っていますか?

4

1 に答える 1

0

SetToolTip:に渡すtoolTipアイテムは単なるポインタであるため、おそらく他の場所で設定またはリリースされます。

このようなことを試してください

- (void)SetToolTip:(NSString *) toolTip
{
    NSString *toolTipCopy = [toolTip copy];
    [statusItem setToolTip:toolTipCopy];
    [toolTipCopy release];
}

また、iOS4またはOSX 10.6以降をターゲットにしている場合は、ARCへの移行を検討します。次に、コードはこれになります。

- (void)SetToolTip:(NSString *) toolTip
{
    [statusItem setToolTip:[toolTip copy]];
}
于 2012-08-22T21:29:00.187 に答える