5

我在我的 iOS 项目中实现 callKit,我使用 callDirectory 扩展来阻止和识别数字,块部分工作得很好,唯一的问题是当我尝试添加要识别的数字时:

private func retrievePhoneNumbersToIdentifyAndLabels() -> (phoneNumbers: [String], labels: [String])? {
    // retrieve list of phone numbers to identify, and their labels
    interDefaults?.synchronize()
    if let numbers = interDefaults!.string(forKey: "ident-numbers"){
        if let identities = interDefaults!.string(forKey: "ident-identities"){
            let formattedNumbers = numbers.characters.split{$0 == "*"}.map(String.init)
            let formattedIdent = identities.characters.split{$0 == "*"}.map(String.init)
            return (formattedNumbers, formattedIdent)
        }
    }
    return ([""], [""])

}

当我尝试重新加载扩展时,它失败并出现错误:Error Domain=com.apple.CallKit.error.calldirectorymanager Code=3 "(null)"

通过一些测试,我发现通过将 替换formattedIdent 为 1 个元素的数组 EXP:["Spamm Caller"]扩展工作完美并且没有显示错误,但是当我使用具有多个元素的数组时,会出现相同的错误。我做错了什么??提前致谢

4

3 回答 3

5

我有类似的问题,但我犯的错误是错误代码 4。所以我在 CXErrors 中挖掘并找到了这个枚举。

public enum Code : Int {


        public typealias _ErrorType = CXErrorCodeCallDirectoryManagerError

        case unknown

        case noExtensionFound

        case loadingInterrupted

        case entriesOutOfOrder

        case duplicateEntries

        case maximumEntriesExceeded

        case extensionDisabled

        @available(iOS 10.3, *)
        case currentlyLoading

        @available(iOS 11.0, *)
        case unexpectedIncrementalRemoval
    }

所以基本上unknown == Code 0和其他选项增加一个。这是您的扩展程序尝试处理截至此日期的新数据时可能收到的错误的完整列表。

于 2017-10-17T15:55:30.657 回答
2

CallDirectory 的错误代码在 header 中定义<CallKit/CXError.h>,其中包括:

    CXErrorCodeCallDirectoryManagerErrorEntriesOutOfOrder = 3,

当提供的电话号码出现故障时,会返回此特定错误。数字必须按数字升序排列。

于 2016-11-07T19:47:27.063 回答
0

即使我知道我的号码排序正确,我也收到错误 3。为我解决的问题是注释掉 CallDirectoryHandler 文件中私有函数中的示例代码。

我现在只使用来电显示,但如果我也使用阻塞,那么我也会摆脱那个示例代码。

屏幕抓取 - 用红色注释掉代码

于 2017-05-29T23:24:20.240 回答