我正在使用NSNotification,并且当通知到达其他类时,我想在GUI中进行更改。
这是我发布通知的方式,我不确定这是否是发布通知的好方法?

   [[NSNotificationCenter defaultCenter]
     postNotificationName:@"postDetailsNotification"
     object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys: result, @"arrayDetails", nil]];

所以在其他 class ,我会像这样。
   -(void)registerNotifications
{

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(receivePostDetailsNotification:)
                                                 name:@"postDetailsNotification"
                                               object:nil ];

}

 - (void) receivePostDetailsNotification:(NSNotification *) notification
  {
      NSDictionary * info =  [notification userInfo];
      inputDetails = [info objectForKey:@"arrayDetails"];
      NSLog(@"notification arriveddd=%@",[[inputDetails PostDetail] Text]);



     [self customTxtMessageViewHeight];

}

在customTXtMessageViewHelight方法中,我仅检查txtMessage(它是textview)的内容大小,并调整其大小。
 -(void)customTxtMessageViewHeight
    {

        CGFloat fl;
//MeasureHeightOfUITextView is a method to count textview height and it works without problem
        fl=[nesneResizeTextViewHeight measureHeightOfUITextView:txtMessage ];
        txtMessage.frame=CGRectMake(txtMessage.frame.origin.x, txtMessage.frame.origin.y, txtMessage.frame.size.width, fl);
        imgMessageBackground.frame=CGRectMake(imgMessageBackground.frame.origin.x, imgMessageBackground.frame.origin.y, imgMessageBackground.frame.size.width, fl);


        NSLog(@"size1=%fl",fl);
        NSLog(@"textviewsize=%fl",txtMessage.frame.size.height);

    }

日志是正确的,但是txtMessage的高度没有改变。关于iboutlets没问题,因为如果我在viewDidLoad方法中尝试txtMessage,它的高度就会改变。

因此,在阅读了一些文章之后,我得到了它NSNotification在后台线程中工作,并且我试图像这样调用customTxtMessageViewHeight方法;
[self performSelectorOnMainThread:@selector(customTxtMessageViewHeight) withObject:self waitUntilDone:NO];

但是什么都没有改变。
在我尝试更改NSNotification的发布方式之后
dispatch_async(dispatch_get_main_queue(),^{
    [[NSNotificationCenter defaultCenter]
     postNotificationName:@"postDetailsNotification"
     object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys: result, @"masivDetails", nil]];
});

我以为它将使它在mainThread上工作,但它也没有工作。
我真的很困惑,将很高兴获得任何帮助。
谢谢。

最佳答案

通知在其发布的同一线程上发送/接收。

如果日志一切正常,则好像您的相框被其他东西重新设置了。通常使用此选项的是自动布局-如果您使用的是自动布局,则无需通过设置框架来调整尺寸,而可以通过更新约束来调整尺寸。否则,设置框架会触发布局遍历,该布局遍历会将框架重置回原来的位置。

09-18 09:17