画面に表示されているキーボードのフレームを取得するために、以下のコード行を使用しました。 UIKeyboardDidShowNotification
通知に登録しました。
func keyboardWasShown(notification: NSNotification) {
var info = notification.userInfo
var keyboardFrame: CGRect = info.objectForKey(UIKeyboardFrameEndUserInfoKey).CGRectValue()
}
これはベータ5で動作していました。ベータ6である最新のXcode 6バージョンをダウンロードしました。このエラーは2行目で発生しました。
'[NSObject:AnyObject]?' 「objectForKey」という名前のメンバーがありません
いくつかのグーグルの後、私は this ソリューションに出会いました。そして、私はそれをそのように変えました、
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue()
しかし、それも今では時代遅れになっています。私は今このエラーを受け取ったからです。
'[NSObject:AnyObject]?' 'subscript'という名前のメンバーがありません
このエラーまたはその解決方法がわかりません。
Xcode 6ベータ6リリースノートで述べたように、多数のFoundation APIがオプションの適合性について監査されています。これらの変更により、T!
どちらかと T?
またはT
は、それぞれ値がnull(またはそうでない)である可能性があるかどうかによって異なります。
notification.userInfo
がオプション辞書になりました:
class NSNotification : NSObject, NSCopying, NSCoding {
// ...
var userInfo: [NSObject : AnyObject]? { get }
// ...
}
だからあなたはそれを解く必要があります。 knowuserInfo
がnil
ではない場合、「強制的なアンラッピング」を使用できます。
var info = notification.userInfo!
ただし、userInfo
がnil
の場合、実行時にクラッシュすることに注意してください。
それ以外の場合は、オプションの割り当てを使用する方が適切です。
if let info = notification.userInfo {
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
} else {
// no userInfo dictionary present
}