为了账号安全,请及时绑定邮箱和手机立即绑定

执行粗斜体代码的时候出现+[CATransaction synchronize] called within transaction的提示,怎么解决呢?

/ 猿问

执行粗斜体代码的时候出现+[CATransaction synchronize] called within transaction的提示,怎么解决呢?

iOS
Rey丶Flame 2018-02-01 16:38:55

#import "ViewController.h"

#import <UserNotifications/UserNotifications.h>

@interface ViewController ()<UNUserNotificationCenterDelegate>

@property (weak, nonatomic) IBOutlet UIButton *btn_Clear;

@property (weak, nonatomic) IBOutlet UIButton *btn_getAllDN;

@property (weak, nonatomic) IBOutlet UIButton *btn_DeliverN;

@property (strong, nonatomic) UNUserNotificationCenter *center;

@end

@implementation ViewController

@synthesize center;

- (void)viewDidLoad {

    [super viewDidLoad];

    

    [self checkAuthorizationStatus];

        

        [_btn_getAllDN addTarget:self

                          action:@selector(getDeliveredNotifications)

                forControlEvents:UIControlEventTouchUpInside];

        [_btn_Clear addTarget:self

                       action:@selector(removeAllNotifications)

             forControlEvents:UIControlEventTouchUpInside];

        [_btn_DeliverN addTarget:self

                          action:@selector(pushANotification)

                forControlEvents:UIControlEventTouchUpInside];

    

}

- (BOOL)checkAuthorizationStatus{

    

    center = [UNUserNotificationCenter currentNotificationCenter];

    center.delegate = self;

    __block BOOL result;

    

    [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {

        

        //NSLog(@"%@",settings);

        

        if (settings.authorizationStatus == UNAuthorizationStatusNotDetermined){

            //向用户提出权限申请,此处需要根据content中所包含的内容来申请

            [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert +

                                                     UNAuthorizationOptionSound +

                                                     UNAuthorizationOptionBadge)

                                  completionHandler:^(BOOL granted, NSError * _Nullable error) {

                                      // Enable or disable features based on authorization.

                                  }];

            result = YES;

        }else if(settings.authorizationStatus == UNAuthorizationStatusDenied){

            

            result = NO;

        }

        

    }];

    return result;

}

- (void)addNotification:(NSString *)ID{

    

    

    UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];

    content.title = [NSString localizedUserNotificationStringForKey:@"Hello!" arguments:nil];

    content.body = [NSString localizedUserNotificationStringForKey:[NSString stringWithFormat:@"%@",[NSDate date]] arguments:nil];

    //content.badge = @1;

    NSNumber *badgeNum = [[NSNumber alloc] initWithLong:([UIApplication sharedApplication].applicationIconBadgeNumber + 1)];

    content.badge = badgeNum;

    

    content.categoryIdentifier = @"NOTIFICATION";

    

    content.sound = [UNNotificationSound defaultSound];

    

    // Deliver the notification in five seconds.

       

    UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger

                                                  triggerWithTimeInterval:5 repeats:NO];

    

    NSString *Identifier = nil;

    if (ID == nil){

        Identifier = @"newNotification";

    }else if (ID != nil){

        Identifier = ID;

    }

    UNNotificationRequest* request = [UNNotificationRequest requestWithIdentifier:Identifier

                                                                          content:content trigger:trigger];

    

    // Schedule the notification.

    [center addNotificationRequest:request withCompletionHandler:nil];

    

    

    [self setNotificationCategory];

}

- (void)setNotificationCategory{

    

    

    UNNotificationCategory* generalCategory = [UNNotificationCategory

                                               categoryWithIdentifier:@"GENERAL"

                                               actions:@[]

                                               intentIdentifiers:@[]

                                               options:UNNotificationCategoryOptionCustomDismissAction];

    

    // Create the custom actions for expired timer notifications

    

    UNNotificationAction* defaultAction = [UNNotificationAction

                                           actionWithIdentifier:@"DEFAULT"

                                           title:@"Ignore"

                                           options:UNNotificationActionOptionDestructive];

    

    UNNotificationAction* checkAction = [UNNotificationAction

                                         actionWithIdentifier:@"CHECK_ACTION"

                                         title:@"Check"

                                         options:UNNotificationActionOptionForeground];//激活前台

    

    // Create the category with the custom actions.

    UNNotificationCategory* reactiveCategory = [UNNotificationCategory

                                                categoryWithIdentifier:@"NOTIFICATION"

                                                actions:@[defaultAction,checkAction]

                                                intentIdentifiers:@[]

                                                options:UNNotificationCategoryOptionNone];

    // Register the notification categories.

    [center setNotificationCategories:[NSSet setWithObjects:generalCategory,reactiveCategory,nil]];

    

}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center

       willPresentNotification:(UNNotification *)notification

         withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{

    // Update the app interface directly.

    

    

    [UIApplication sharedApplication].applicationIconBadgeNumber

    = (notification.request.content.badge).integerValue;

    NSLog(@"Get the notification!");

    

    completionHandler(UNNotificationPresentationOptionAlert);

}

- (void) userNotificationCenter:(UNUserNotificationCenter *)center

 didReceiveNotificationResponse:(UNNotificationResponse *)response

          withCompletionHandler:(void (^)(void))completionHandler{

    if ([response.notification.request.content.categoryIdentifier isEqualToString:@"NOTIFICATION"]) {

        //Handle the actions

        if ([response.actionIdentifier isEqualToString:@"DEFAULT"]){

            [UIApplication sharedApplication].applicationIconBadgeNumber = (NSInteger)(response.notification.request.content.badge.floatValue - 1);

            

        }else if ([response.actionIdentifier isEqualToString:@"CHECK_ACTION"]){

            [UIApplication sharedApplication].applicationIconBadgeNumber = (NSInteger)(response.notification.request.content.badge.floatValue - 1);

        }

        

    }else if([response.notification.request.content.categoryIdentifier isEqualToString:@"GENERAL"]){

        

    }

    

    completionHandler();

}

- (void)getDeliveredNotifications{

    

    

    [center getDeliveredNotificationsWithCompletionHandler:^(NSArray<UNNotification *> * _Nonnull notifications) {

        NSLog(@"%@",notifications);

    }];

}

- (void)removeAllNotifications{

    [center removeAllDeliveredNotifications];

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;

}

- (void)pushANotification{

    [self addNotification: [NSString stringWithFormat:@"%@",[NSDate date]]];

}


查看完整描述

目前暂无任何回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信