標籤:動態庫 返回 部署 ant float bad void center app
if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) 運行環境判斷;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 編譯器、開發環境支援;
部署環境支援;
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]
在低於庫版本的運行環境運行時,center傳回值為nil;
結論:
1)在對象或類符號不存在時,動態庫沒有任何存在,傳回值為nil;
2)當一個類的介面存在跨系統層級的函數存在時,因為類或對象存在,函數符號不存在,所以存在崩潰的情況。
- (void)registerRemoteNotification {
if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 // Xcode 8編譯會調用
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionCarPlay) completionHandler:^(BOOL granted, NSError *_Nullable error) {
if (!error) {
NSLog(@"request authorization succeeded!");
}
}];
[[UIApplication sharedApplication] registerForRemoteNotifications];
#endif
} else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
UIUserNotificationType types = (UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge);
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
[[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
UIRemoteNotificationType apn_type = (UIRemoteNotificationType)(UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeBadge);
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:apn_type];
}
}
ios 編譯版本 最低版本 運行版本 動態連結程式庫