【问题标题】:AppDelegate not responding to NSNotificationAppDelegate 没有响应 NSNotification
【发布时间】:2014-04-19 22:06:00
【问题描述】:

我想使用我应用的 AppDelegate 发布 CRToast 通知

这是我添加观察者的方式。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(noConnectionNotification)
                                                 name:@"No_Connection_Available" object:nil];

}

这是它应该调用的方法

-(void)noConnectionNotification{
     NSLog(@"received notification");
    NSString *notificationString = @"Unable to reach server. Changes will be cached.";
    NSDictionary *options = @{kCRToastTextKey : notificationString,
                              kCRToastNotificationTypeKey : @(CRToastTypeStatusBar),
                              kCRToastTextAlignmentKey : @(NSTextAlignmentCenter),
                              kCRToastBackgroundColorKey : [UIColor redColor],
                              kCRToastAnimationInDirectionKey : @(CRToastAnimationDirectionTop),
                              kCRToastAnimationOutDirectionKey : @(CRToastAnimationDirectionTop),
                              kCRToastTimeIntervalKey : @(2),
                              };
    [CRToastManager showNotificationWithOptions:options
                                completionBlock:nil];
}

以及我如何发布来自不同班级的通知:

 dispatch_async(dispatch_get_main_queue(), ^{
       [[NSNotificationCenter defaultCenter] postNotificationName:@"No_Connection_Available" object:nil];
        });
    }

该方法没有被调用。如果我让我的各种视图控制器之一成为观察者,那么那个会收到通知,但 AppDelegate 不是。难道就不能让 AppDelegate 成为 NSNotification 观察者吗?

【问题讨论】:

    标签: ios objective-c cocoa-touch nsnotificationcenter appdelegate


    【解决方案1】:

    收到通知时调用的方法需要有一个NSNotification 参数。所以,这个方法应该是这样的:

    -(void)noConnectionNotification:(NSNotification*)notification {
         NSLog(@"received notification");
        NSString *notificationString = @"Unable to reach server. Changes will be cached.";
        NSDictionary *options = @{kCRToastTextKey : notificationString,
                                  kCRToastNotificationTypeKey : @(CRToastTypeStatusBar),
                                  kCRToastTextAlignmentKey : @(NSTextAlignmentCenter),
                                  kCRToastBackgroundColorKey : [UIColor redColor],
                                  kCRToastAnimationInDirectionKey : @(CRToastAnimationDirectionTop),
                                  kCRToastAnimationOutDirectionKey : @(CRToastAnimationDirectionTop),
                                  kCRToastTimeIntervalKey : @(2),
                                  };
        [CRToastManager showNotificationWithOptions:options
                                    completionBlock:nil];
    }
    

    然后,添加观察者应该如下所示:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(noConnectionNotification:)
                                                     name:@"No_Connection_Available" object:nil];
    
    }
    

    注意@selector 调用中方法名称后面的冒号。

    【讨论】:

    • 我试过了,还是不行。我在noConnectionNotification 方法处设置了一个断点,它永远不会被触发。
    • @JosephToronto noConnectionNotification: 方法是您的 AppDelegate 类的成员吗?
    • 如果你的意思是我在 AppDelegate.h 中声明了它,那么是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多