2017-09-29 7 views
2

私のアプリケーションをXcode 9とiOS 11にアップグレードして以来、私はEventKitと矛盾しています。iOS 11のEventKitで問題が発生しました

  • たとえば、新しいイベントを作成する場合、プロパティがString!として宣言されている場合、event.eventIdentifierはnilを返します。 iOS11の前に空の文字列が返されました
  • もう1つの問題は、プロパティが文字列としても定義されていると、ユーザーの1人がイベントでnilタイトルを取得していることです。
  • 特定のタスクを編集するときに標準のEventKitUIエディタを使用すると、アプリケーションがクラッシュするという別のレポートが表示されます。

誰かに同様の問題が発生しているかどうかを確認しています。私はすでにベータ版であった頃に既にあるバグレポートを提出しています。

更新:私は似たような経験してる34134523

+0

iOS 11のバグを自分で見ているのは自分だけです。 10シム、11シム、10デバイスで確認されました。バグは11デバイスでのみ表示されます。 Events、yay –

答えて

1

: Appleはの重複として私のバグレポートフラグを設定しています。それは、デフォルトのカレンダーを取得できないためです。私は私のユニットテストでこれを見ています。私はまだデフォルトカレンダーが失敗している理由を理解することができませんでした。

[EventKit]エラーが新しいイベントのデフォルトカレンダーを取得:エラードメイン= EKCADErrorDomainコード= 1019 "(ヌル)"

0

まあ、それは(暗黙的にオプションをアンラップ)String!であれば、それはnilを返すことができます。 (明らかに:nilが返品価値にならない場合は、それは正確にその保証を提供するStringである)

これはおそらく、3番目のポイントでクラッシュしている可能性が高いです。 APIがオプションを返す場合は、nilをチェックする必要があります(通常のオプション[Swift 4でコンパイルしたときはどうしたのでしょうか?])。 それはevent.title ?? 'no title'のような単純なものかもしれません。

最初の2つの変更は、私にとっても妥当と思われます。

最初はAPI内の修正で、eventIdentifierの空の文字列は明らかに間違っています。 nil(識別子が割り当てられていないことを意味する)を返す必要があります。

2番目の例も意味があります。タイトルはiCalendar(要約プロパティ)の必須フィールドではないため、APIに欠落しているタイトル(空のタイトルと比較して)が正しく反映されるようになりました。

APIを変更しなかったとすれば(これは私が3.2の場合ではないと思う)、これはすべてうまくいくようです。コードでnilの値が正しくチェックされていません。

+0

暗黙のうちにアンラップされたオプションの場合、ゼロ値をチェックするのはなぜですか?それはそれのポイントではありませんか?私はあなたが正しいと思う、新しいイベントのための無価値を得る方が良いが、彼らはイベントキットのAPIにこの新しい行動を反映する必要がある。 –

+0

"暗黙のうちにアンラップされたオプションの場合は何もチェックしないのはなぜですか?その点ではありませんか?" いいえ、それは* non * -Optional型のポイントになります。暗黙のうちにアンラップされたオプションは、オプションが*通常*非nilである状況のためのほとんどの利便性です。ただし、保証はありません。この場合、どちらか一方のオプションタイプを使用しません。 "この新しい動作をイベントキットAPIに反映する必要があります。" APIは変更されませんでした。以前はゼロ値を返すことが許されていました。 – hnh

+0

私はそれが規則的でなければならないことに同意します。そしておそらくそれはSwift 4(チェックの価値があるでしょう)にあります。 Swift 3.2の全体的なポイントは、API(インタフェース)が変更されず、ソースコードがそのままコンパイルされることです。 – hnh

関連する問題