2016-03-29 140 views
2

任何人试图使用iOS 9联系人框架删除现有联系人组?删除iOS联系人组

我初始化联系人存储器,并请求触头组的列表中,这使我CNGroup实例的数组:

var groups: [CNGroup]? 

do { 
    self.groups = try contactStore.groupsMatchingPredicate(nil) 
} 
catch { ... } 

,然后我显示在表视图的组。当用户滑动表格视图单元格时,我想从联系人存储中删除相应的组。

但是,CNContactStoredeleteGroup方法需要实例,而不是CNGroup。 Xcode中给我一个错误:

Cannot convert value of type 'CNGroup' to expected type 'CNMutableGroup' 

很显然,如果我尝试了CNGroup实例转换为CNMutableGroup

Could not cast value of type 'CNGroup' (0x370890f8) to 'CNMutableGroup' (0x370899f4) 

我意识到:

let saveRequest = CNSaveRequest() 
saveRequest.deleteGroup(group as! CNMutableGroup) 
do { 
    try contactStore.executeSaveRequest(saveRequest) 
} 
catch { ... } 

我在运行时得到一个崩溃这是因为CNGroupCNMutableGroup的超类,但后来我再也看不到如何获得CNMutableGroup初始化机智h CNGroup实例。

我已请求访问联系人框架。 Xcode 7.3,iOS 9.2.1。

那么,关于如何删除联系人组的任何想法?

回答

4

投射CNGroup的可变副本修复此问题。

let saveRequest = CNSaveRequest() 
saveRequest.deleteGroup(group.mutableCopy() as! CNMutableGroup) 
do { 
    try contactStore.executeSaveRequest(saveRequest) 
} 
catch { ... } 
+0

最后在iOS 10.3中用Xcode 8.3 + Swift 3.1在最新的API语法中试用了contactStore.execute(saveRequest)。谢谢! –