2016-11-26 1 views
4

У меня есть приложение, которое должно загружать список календарей в pickerview. Он работает, но только после сбоя приложения и снова открывается. Я не уверен, почему он не будет работать при первом открытии приложения.Ошибка при получении всех календарей: Ошибка домена = EKCADErrorDomain Code = 1013 "(null)" Swift 3

Календарь Разрешение запроса:

func requestCalendarPermissions() { 
eventInstance.requestAccess(to: .event, completion: {(accessGranted: Bool, error: Error?) in 

    if accessGranted == true { 
     print("Access Has Been Granted") 
     } 
    else { 
     print("Change Settings to Allow Access") 
    } 
    }) 
} 

Проверка разрешения Статус:

func checkStatus() { 
let currentStatus = EKEventStore.authorizationStatus(for: EKEntityType.event) 

if currentStatus == EKAuthorizationStatus.notDetermined { 
    requestCalendarPermissions() 
} 
else if currentStatus == EKAuthorizationStatus.authorized { 
    print("Access Has Been Granted") 
} 
else if (currentStatus == EKAuthorizationStatus.denied) || (currentStatus == EKAuthorizationStatus.restricted){ 
    print("Access Has Been Denied") 
} 
} 

PickerView Код:

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return calendars.count 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return calendars[row].title 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    CalendarField.text = calendars[row].title 
    calID = calendars[row].calendarIdentifier 
} 

Эта ошибка появляется:

Ошибка при получении всех календарей: Ошибка домен = EKCADErrorDomain Code = 1013 «(нуль)»

приложение, наконец, выходит из строя, потому что он пытается заполнить pickerView и нет никаких данных, чтобы заполнить. Я загружаю календари.

Но по какой-то причине это не происходит после сбоя приложения и его повторного открытия.

Благодаря

[Update]

Console из:

2016-11-26 18: 04: 23,856 ПТФ [98143: 2347570] Ошибка при получении всех календарей: Error Domain = EKCADErrorDomain Code = 1013 "(null)" Календари Загружено 2016-11-26 18: 04: 23.869 PTF [98143: 2347569] Ошибка при получении всех календарей: Ошибка домена = EKCADErrorDomain Code = 1013 "(null)" Календари Загружено

доступ предоставлен 2016-11-26 18: 04: 25.954 PTF [98143: 2347569] Ошибка при получении всех календарей: Ошибка домена = EKCADErrorDomain Code = 1013 "(нуль)" Календарь Loaded

2016 -11-26 18: 04: 46,620 ПТФ [98143: 2347522] * Нагрузочный приложение из-за неперехваченного исключением 'NSRangeException', причина: '* - [NSArray0 objectAtIndex]: индекс 0 за границы для пустого NSArray' *** Первый стек вызовов броска: (0 CoreFoundation 0x000000010bb6634b __exceptionPreprocess + 171 1 libobjc.A.dylib
0x000000010b5c721e objc_exception_throw + 48 2 CoreFoundation
0x000000010bb7dddd - [__ NSArray0 objectAtIndex:] + 93 3
libswiftCore.dylib 0x000000010d95311d _TFVs12_ArrayBuffer19_getElementSlowPathfSiPs9AnyObject_ + 125 4 libswiftCore.dylib 0x000000010d953003 _TFVs12_ArrayBuffer10getElementfTSi20wasNativeTypeCheckedSb_x + 147 5 libswiftCore.dylib 0x000000010d963b8a _TFSag9subscriptFSix + 138 6 ПТФ 0x000000010af8df12 _TFC3PTF19MainScreenTableView10pickerViewfTCSo12UIPickerView12didSelectRowSi11inComponentSi_T_ + 226 7 ПТФ 0x000000010af8e10a _TToFC3PTF19MainScreenTableView10pickerViewfTCSo12UIPickerView12didSelectRowSi11inComponentSi_T_ + 74 8 UIKit 0x000000010c0d301d - [UIPickerView _sendSelectionChangedForComponent: уведомить:] + 104 9 UIKit 0x000000010c0d326e - [UIPickerView _sendSelectionChangedFromTable: уведомить:] + 370 10 UIKit 0x000000010c8a560d - [UIPickerTableView _scrollingFinished] + 187 11 UIKit 0x000000010c8a57fd - [UIPickerTableView scrollViewDidEndDecelerating:] + 30 12 UIKit 0x000000010c1df821 - [UIScrollView (UIScrollViewInternal) _scrollViewDidEndDeceleratingForDelegate] + 91 13 UIKit 0x000000010c1dc362 - [UIScrollView (UIScrollViewInternal) _stopScrollDecelerationNotify:] + 316 14 UIKit 0x000000010c1dc5b9 - [UIScrollView (UIScrollViewInternal) _stopScrollingNotify: контактный: tramplingDragFlags:] + 505 15 UIKit 0x000000010c1d4503 - [UIScrollView _smoothScrollWithUpdateTime:] + 3304 16 QuartzCore 0x0000000113fa3bd5 _ZN2CA7Display15DisplayLinkItem8dispatchEy + 57 17 QuartzCore 0x0000000113fa3a95 _ZN2CA7Display11DisplayLink14dispatch_itemsEyyy + 449 18 CoreFoundation 0x000000010baf8964 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION
+ 20 19 CoreFoundation 0x000000010baf85f3 __CFRunLoopDoTimer + 1075 20 сердечника Фонд 0x000000010baf817a __CFRunLoopDoTimers + 250 21 CoreFoundation
0x000000010baeff01 __CFRunLoopRun + 2065 22 CoreFoundation
0x000000010baef494 CFRunLoopRunSpecific + 420 23 GraphicsServices
0x000000011124aa6f GSEventRunModal + 161 24 UIKit
0x000000010c0eff34 UIApplicationMain + 159 25 ПТФ
0x000000010af9f36f основной + 111 26 libdyld.dylib
0x000000010f30368d старт + 1) LibC++ abi.dylib: завершение с неперехваченного исключением типа NSException

+0

Какая строка кода вызывает сообщение об ошибке? И почему ваше приложение потерпит крах? Если ваше приложение рушится, потому что ваше приложение не имеет доступа к календарю, вам необходимо исправить свой код. – rmaddy

+0

Приложение имеет доступ к календарям, но после предоставления доступа он должен разрешить пользователю щелкнуть текстовое поле, а pickerview появится со списком календарей. Однако при начальной установке приложения список выглядит пустым, а затем сбой. После упомянутого сбоя приложение может быть снова открыто, и теперь в списке теперь отображается список календарей. – rutheferd

+0

Вы не ответили ни на один из моих вопросов. Какая строка кода вызывает сообщение об ошибке? Какая строка кода вызывает ваш сбой? Каково сообщение об ошибке при сбое? Если вы не хотите предоставлять подробную информацию людям, которые могут вам помочь, зачем беспокоиться о публикации вопроса? – rmaddy

ответ

7

Я только столкнулся с этой проблемой. После «requestAccess» в документации говорится о вызове «reset» на eventInstance. Однако даже это не помогло. Однако получение нового события произошло. Я использую цель c, поэтому я освобождаю объект EKEventStore, который я использовал, и выделяю новый.

+1

Это должен быть принятый ответ! Работал и для меня! – ph1lb4