Ios ABAddressBook到CNContact应用程序的转换

Ios ABAddressBook到CNContact应用程序的转换,ios,contacts,abaddressbook,ios9,Ios,Contacts,Abaddressbook,Ios9,我正在开发一款应用程序,该应用程序即将推出,但使用的是ABAddressBook框架。随着iOS9中ABAddressBook的弃用,我是否需要检查用户的iOS版本,并对iOS9之前的用户使用ABAddressBook,对iOS9用户使用CNContact 其他人是怎么处理的?我以前从未遇到过这样的情况 我也一直在处理和研究这个问题,我选择按照你的建议去做;检查用户的iOS版本,执行以下操作: NSString *version = [[UIDevice currentDevice] syste

我正在开发一款应用程序,该应用程序即将推出,但使用的是ABAddressBook框架。随着iOS9中ABAddressBook的弃用,我是否需要检查用户的iOS版本,并对iOS9之前的用户使用ABAddressBook,对iOS9用户使用CNContact


其他人是怎么处理的?我以前从未遇到过这样的情况

我也一直在处理和研究这个问题,我选择按照你的建议去做;检查用户的iOS版本,执行以下操作:

NSString *version = [[UIDevice currentDevice] systemVersion];
BOOL isVersion8 = [version hasPrefix:@"8."];
BOOL isVersion7 = [version hasPrefix:@"7."];
//...
…根据您决定支持的应用程序版本继续

然后,我做了一个检查,要么在iOS 9之前使用Addressbook框架,要么在iOS 9及以后使用Contacts框架

if(isVersion7 || isVersion8){
    //Use AddressBook
   }
else{
    //Use Contacts
}

这是我能想到的最好的处理弃用业务的方法…

弃用并不意味着删除。只需将链接到这两个框架作为可选选项,并开始设计能够处理这两个框架的数据工作流。另外,请注意CNContact是新的,充满了bug

一旦你认为你的应用程序经过了重构,iOS升级到了9.1,就给它开绿灯

如何知道系统是否支持功能

1) 检查类是否存在

if(NSClassFromString(@"CNContact")) {
    // Do something
}
对于弱链接类,直接向类发送消息是安全的。值得注意的是,这适用于没有明确链接为“必需”的框架。对于缺少的类,表达式的计算结果为nil

(二)

#如果没有NSFoundation版本号(iOS)9
#def NSFoundationVersionNumber\u iOS\u 9编号
#恩迪夫
if(楼层(NSFoundationVersionNumber)

这是正确的检查方法。

您找到处理此问题的方法了吗?我很想知道每个人是如何处理此问题的。不,我仍然没有找到答案。已经两周了,我认为这是唯一的选项,因此我将此标记为已回答。如果出现更好的选项,我将更改它。谢谢,詹姆斯!
#ifned NSFoundationVersionNumber_iOS_9 
 #def NSFoundationVersionNumber_iOS_9 NUMBER
#endif

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9) {
   // Use address book
} else {
   // Use contact framework
}
if #available(iOS 9, *)
{
   // iOS 9 - CNContact
}
else
{
  // iOS 8 - ABAddressBook
}