Сначала мы получаем данные 160К с сервера. Затем мы пытаемся вставить эти данные 160К непосредственно в CallKit, но мы получаем эту ошибку:
com.apple.CallKit.error.calldirectorymanager Code=2
CXErrorCodeCallDirectoryManagerErrorLoadingInterrupted
Затем мы попытались вставить данные 30К, и на этот разэто было успешно.
Наша проблема в том, что мы не можем вставить больше 30 КБ, поэтому мы не можем использовать оставшиеся 120 КБ.
Как мы можем решить эту проблему?
Это мой добавочный код:
@interface CallDirectoryHandler () <CXCallDirectoryExtensionContextDelegate>
@end
@implementation CallDirectoryHandler
- (void)beginRequestWithExtensionContext:(CXCallDirectoryExtensionContext *)context {
context.delegate = self;
if (![self addIdentificationPhoneNumbersToContext:context]) {
NSError *error = [NSError errorWithDomain:@"CallDirectoryHandler" code:2 userInfo:nil];
[context cancelRequestWithError:error];
return;
}
[context completeRequestWithCompletionHandler:nil];
}
- (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:SharedUserDefaultsSuiteName];
containerURL = [containerURL URLByAppendingPathComponent:callDirectoryPathComponent];
NSURL *containerURLForCallerIDFounded = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:SharedUserDefaultsSuiteName];
containerURLForCallerIDFounded = [containerURLForCallerIDFounded URLByAppendingPathComponent:callDirectorySolvedCallerIDPathComponent];
NSMutableDictionary *dictFromFile1 = [NSMutableDictionary dictionaryWithContentsOfFile:containerURL.path];
NSMutableDictionary *dictFromFile2 = [NSMutableDictionary dictionaryWithContentsOfFile:containerURLForCallerIDFounded.path];
if (dictFromFile2.count > 0) {
[dictFromFile1 addEntriesFromDictionary:dictFromFile2];
}
if (dictFromFile1.count == 0) {
return YES;
}
NSArray *sortedArray = [[dictFromFile1 allKeys] sortedArrayUsingComparator: ^NSComparisonResult(
NSString *string1,
NSString *string2) {
return [string1 compare: string2 options: NSNumericSearch];
}];
for (int i=0; i<sortedArray.count; i++) {
@autoreleasepool {
NSString *number = [sortedArray objectAtIndex:i];
NSString *name = dictFromFile1[number];
if (number && [number isKindOfClass:[NSString class]] &&
name && [name isKindOfClass:[NSString class]]) {
CXCallDirectoryPhoneNumber phoneNumber = [number longLongValue];
[context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNumber label:name];
}
number = nil;
name = nil;
}
}
return YES;
}
#pragma mark - CXCallDirectoryExtensionContextDelegate
- (void)requestFailedForExtensionContext:(CXCallDirectoryExtensionContext *)extensionContext withError:(NSError *)error {
}
@end