2017-09-29 39 views
2

由於我將應用升級到Xcode 9和iOS 11,我一直在遇到與EventKit不一致的情況。iOS 11中的EventKit導致問題

  • 例如,當創建新事件時,event.eventIdentifier返回零,當屬性被聲明爲String !.在iOS11之前,它返回了一個空字符串
  • 另一個問題是,我的一個用戶在屬性也被定義爲String!時在事件上也沒有標題。
  • 我收到另一份報告,說明在編輯特定任務時使用標準EventKitUI編輯器時,我的應用程序會崩潰。

我在問是否有其他人遇到類似的問題。我剛纔提交了一個bug報告,當時它還處於測試階段。

更新: 蘋果標記我的錯誤報告的副本:34134523

+0

只看到設備iOS 11自己搞錯了。剛剛在10個sim,11個sim和一個10個設備上進行了驗證。僅在11設備上出現Bug報告。事件,yay –

回答

1

我遇到類似的東西。這似乎是因爲它無法檢索默認日曆。我在單元測試中看到了這一點。我還沒有弄清楚爲什麼默認日曆失敗。

[EventKit]錯誤獲取默認日曆新事件:錯誤域= EKCADErrorDomain代碼= 1019 「(空)」

0

好吧,如果是String!(隱式解開可選),它可以返回零。 (只是要清楚:如果nil不可能是一個可能的返回值,它將只是String,這正好提供了這種保證。)

這很可能就是爲什麼你現在正在崩潰的第三點。如果一個API返回一個可選的,你需要檢查零(雖然他們應該使它成爲一個常規可選的[也許他們在Swift 4中編譯?])。 它可能與event.title ?? 'no title'一樣簡單。

前兩個變化對我來說似乎也是合理的。

第一個是在API中修復,返回空字符串爲eventIdentifier顯然是錯誤的。它必須返回零(意味着沒有標識符分配)。

第二個也是有道理的。該標題不是iCalendar(SUMMARY屬性)中的必填字段,因此API現在可以正確反映缺少的標題(vs空標題)。

假設他們沒有改變API(我認爲這不是3.2的情況),這一切似乎都很好。您的代碼沒有正確檢查nil的值。

+0

爲什麼我應該檢查一個零值,如果它的一個隱式解包可選?這不就是它的重點嗎?我認爲你是對的,對於新事件來說毫無價值,但他們需要在他們的活動套件API中反映這種新行爲。 –

+0

「爲什麼我應該檢查一個零值,如果它是一個隱含的解包可選?是不是它的重點?」 不,這將是*非*可選類型的要點。隱式解包的optionals對於可選是*通常*非零的情況通常很方便。但這不是保證,在這種情況下,首先不會使用可選類型。 「他們需要在他們的活動套件API中反映這種新行爲」 API沒有改變。它被允許之前返回零值。 – hnh

+0

我同意它應該是一個常規的可選項。也許它在Swift 4中(值得檢查)。 Swift 3.2的重點在於API(接口)不會改變,源代碼按原樣編譯。 – hnh