繁体   English   中英

委托方法中的类实例方法未调用

[英]class instance method in delegate method is not called

有红色,蓝色和黄色3类。 每当按下按钮时,黄色类都会通知蓝色类,并通过委托将字符串传递回去。 这一点工作正常。 现在,蓝色类正在尝试在委托实现方法中调用红色类实例方法displayString。 但是由于某种原因,从未调用过此实例方法。 调试后,我发现[self.red displayString:col];中的self.red为null [self.red displayString:col]; 但我在Blue类的另一个类实例方法中使用self.red,那么self.red不为NULL。 这里缺少什么

@interface RedClass : NSObject 
     -(void)displayString:(NSString*)str;
@end

@implementation RedClass
     -(void)displayString:(NSString*)str
     {
         NSLog(@"The string:%@",str);
     }
@end

// BlueClass.h

    @interface BlueClass:UIViewController<YellowDelegate>
         @property (nonatomic, strong) RedClass *red;
    @end

//正在实现委托示例并调用示例类的类实例方法的类

// BlueClass.m

   @implementation BlueClass

   - (void)colorChanged:(NSString*)col
   {
      [self.red displayString:col];
   }
   @end

//黄色类

  @protocol YellowDelegate<NSObject> 
     -(void)colorChanged:(NSString *)col;
  @end
  @interface YellowClass:UIView
      @property (nonatomic, weak) id <YellowDelegate> delegate;
  @end

//YellowClass.m @implementation YellowClass

  (IBAction)btnPressed:(id)btn
   {
        [self.delegate colorChanged:@"yellow"];
   }
  @end

显示如何创建和连接所有对象。 您在哪里分配RedClass实例并将其分配给red @property 您在哪里设置代表?

如果答案是否定的,那么您的代码将不执行任何操作,因为在Objective-C中, nil吃掉message

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM