2016-11-26 5 views
4

私は、カレンダーのリストをピッカービューに読み込むはずのアプリを持っています。それは動作しますが、アプリケーションがクラッシュしてから再度開いた後でなければなりません。なぜ私はアプリの最初のオープニングで動作しませんかわからない。すべてのカレンダーを取得中にエラーが発生しました:Error Domain = EKCADErrorDomain Code = 1013 "(null)" Swift 3

カレンダー許可要求:

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 
} 

このエラーが立ち上がっ

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") 
    } 
    }) 
} 

許可ステータスの確認すべてのカレンダーを取得

エラー:それはpickerViewを埋めるためにしようとして埋めるためにデータがないため、エラードメイン= EKCADErrorDomainコード= 1013「(ヌル)は」

アプリがついにクラッシュします。私はカレンダーを読み込みます。

しかし、アプリがクラッシュして再び開いた後に何らかの理由でこれが発生することはありません。

おかげ

[更新]

コンソールアウト:

2016年11月26日18:04:23.856 PTF [98143:2347570]すべての カレンダー取得エラー:エラードメインを= EKCADErrorDomain Code = 1013 "(null)"カレンダー カレンダー カレンダー:エラードメイン= EKCADErrorDomainコード= 1013 "(null)"カレンダー がロードされました

アクセスは2016年11月26日18付与されている:04:25.954 PTF [98143:2347569]すべてのカレンダーを取得 エラー:エラードメイン= EKCADErrorDomainコード= 1013 "(ヌル)" カレンダーは

2016をロード-11-26 18:04:46.620 PTF [98143:2347522] *による キャッチされない例外 'NSRangeException'、理由にアプリを終了: '* - [NSArray0 objectAtIndex:]:空のNSArrayのための境界を越えてインデックス0' ***ファーストスローコールスタック:(0 CoreFoundation 0x000000010bb6634b __exceptionPreprocess + 171 1 libobjc.A.dylib
0x000000010b5c721e objc_exception_throw + 48 2 CoreFoundationの
0x000000010bb7dddd - [__ NSArray0 objectAtIndex:] + 93 3
libswiftCore.dylibは_TFVs12_ArrayBuffer19_getElementSlowPathfSiPs9AnyObject_ + 125 4 libswiftCore.dylib 0x000000010d953003 _TFVs12_ArrayBuffer10getElementfTSi20wasNativeTypeCheckedSb_x + 147 5 libswiftCoreを0x000000010d95311d。dylibの0x000000010d963b8a _TFSag9subscriptFSix + 138 6 PTF 0x000000010af8df12 _TFC3PTF19MainScreenTableView10pickerViewfTCSo12UIPickerView12didSelectRowSi11inComponentSi_T_ + 226 7 PTF 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 PTF
0x000000010af9f36fメイン+ 111 26 libdyld.dylib
0x000000010f30368d start + 1)libC++ abi.dylib: で終了NSException型のキャッチされない例外

+0

エラーメッセージの原因となったコードはどれですか?そして、あなたのアプリがクラッシュする理由は?アプリがカレンダーにアクセスできないためアプリがクラッシュしている場合は、コードを修正する必要があります。 – rmaddy

+0

アプリはカレンダーにアクセスできますが、アクセスが与えられた後、ユーザーがテキストフィールドをクリックできるようになっており、pickerviewがカレンダーのリストでポップアップします。しかし、アプリの最初のインストールでは、リストが空になってからクラッシュします。クラッシュした後、アプリは再び開き、ピッカービューにカレンダーのリストが表示されます。 – rutheferd

+0

あなたは私の質問に答えなかった。投稿したエラーの原因となっているコードはどれですか?あなたのクラッシュを引き起こすコードはどれですか?クラッシュのエラーメッセージは何ですか?人々のための詳細を提供したくない場合は、質問を投稿するのがなぜ迷惑でしょうか? – rmaddy

答えて

7

私はこの問題に直面しました。 'requestAccess'の後に、ドキュメンテーションはeventInstanceで 'reset'を呼び出すと言います。しかし、これでさえ物事を働かせることはできませんでした。しかし、新しいeventInstanceを取得しました。私は客観的なCを使用しているので、私は使用していたEKEventStoreオブジェクトを解放し、新しいものを割り当てます。

+1

これは受け入れられる回答である必要があります!私のために働いた! – ph1lb4

関連する問題