質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

604閲覧

swift 初回起動時のみ表示したい

EricaChloe

総合スコア8

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2018/07/28 14:37

編集2018/07/31 08:32

前提・実現したいこと

初回起動時のみ表示したいviewがあります。
初回かどうかの判断はできているのですが、表示しようとするとエラーが出ます。
初回起動時以外はエラーもなく表示できています。

debugエリアで以下のエラーがでています。

発生している問題・エラーメッセージ

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<sampleCoreBluetooth.ViewController 0x7fcd925098c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key ownNumber.'

該当のソースコード

Swift

1 2@UIApplicationMain 3class AppDelegate: UIResponder, UIApplicationDelegate { 4 var window: UIWindow? 5 6 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 7 8 let ud = UserDefaults.standard 9 let dict = ["firstLaunch": true] 10 ud.register(defaults: dict) 11 12 if ud.bool(forKey: "firstLaunch"){ 13 ud.set(false, forKey: "firstLaunch") 14 print("初回起動") 15 16 let viewControllers = ViewController(nibName: "StartViewController", bundle: nil) 17 window = UIWindow(frame: UIScreen.main.bounds) 18 window?.rootViewController = viewControllers 19 window?.makeKeyAndVisible() 20 } 21 print("初回起動ではない") 22 23 //tabbar 配列 24 var viewControllers: [UIViewController] = [] 25 26 //1ページ目 27 let firstTab = AttendanceView() 28 firstTab.tabBarItem = UITabBarItem(title: "attend", image: UIImage(named: "dash"), tag: 1) 29 viewControllers.append(firstTab) 30 31 //2ページ目 32 let secondTab = ChangeAttend() 33 secondTab.tabBarItem = UITabBarItem(title: "status", image: UIImage(named: "pin"), tag: 2) 34 viewControllers.append(secondTab) 35 36 //セット 37 let tabBarController = UITabBarController() 38 tabBarController.setViewControllers(viewControllers, animated: false) 39 40 let colorKey = UIColor(red: 249/155, green: 161/255, blue: 188/255, alpha: 1.0) 41 UITabBar.appearance().tintColor = colorKey 42 43 window = UIWindow(frame: UIScreen.main.bounds) 44 window?.rootViewController = tabBarController 45 window?.makeKeyAndVisible() 46 47 return true 48 } 49 50

試したこと

初回起動時に表示したいviewにownNumberでtextFieldを置いてます。
@IBOutletも作り直し、名前をかえても同じエラーが表示されます。。

解決方法

初回のみ登録してほしい番号があったので、それをuserDefaultsに登録。

AttendanceView

1 override func viewDidAppear(_ animated: Bool) { 2 if ud.object(forKey: "Number") == nil { 3 print("ud ない") 4 let vc = StartViewController() 5 self.present(vc, animated: true, completion: nil) 6 7 } else { 8 print("ud ある") 9 } 10 }

これで、初回起動&userDefaultsに値がない場合StartViewControllerに飛んでくれました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

コード眺めただけですが、
初回起動時はUIWindowを二回作っていませんか?

投稿2018/07/28 20:59

daisuke7

総合スコア1563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EricaChloe

2018/07/29 02:12

コメントありがとうございます! 初回起動と、それ以外で二つ用意しているのですが 一つでいいのでしょうか?
daisuke7

2018/07/29 02:34

UIWindowは(普通は)起動時に一回しか作成しません。 初回起動時に「初回起動」と「初回起動ではない」の両方が デバッグログに出ていませんか? 初回起動時にStartViewControllerをwindowに渡したらそれでreturnして、 StartViewControllerから本来の画面に遷移する手順を考えるか、 あるいは(タブの一つ目でおそらく最初に表示される)AttendanceViewのviewWillAppearあたりで初回チェックして、初回ならそこで StartViewControllerをモーダルで出すとか。
EricaChloe

2018/07/31 08:26

AttendaceViewのviewDidAppearで判断させ、モーダルでStartViewControllerを出すことができました! ありがとうございます。
guest

0

this class is not key value coding-compliant for the key ownNumber
このエラーに関してはxibやstoryboard上のパーツ接続がよろしくない状況になっているときのエラーのようです。
(@IBOutletの名前を変更したのにつなぎ直していないなど)
なので一度、xibやstoryboardでパーツとの接続を解除してつなぎ直すと解消すると思います。
(ownNumberってのが未対応になっているようです)

swift初心者:「this class is not key value coding-compliant for the key」の対処方法
this class is not key value coding-compliant for the keyAdd Starlavandin

投稿2018/07/28 20:39

razuma

総合スコア1313

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EricaChloe

2018/07/29 02:11

コメントありがとうございます! 全てつなぎなおしたり、作り直したりしたのですが同じエラーがでています。。
razuma

2018/07/29 03:25 編集

ちなみにですが、エラー内容的には初回起動時にViewを切り替える処理は関係なさそうなのですが、そこの切り替えをなくして元の状態にするとエラーが発生しなくなりますか?エラー内容的にはStartViewControllerにあるownNumberが怪しそうです。例えばownNumberの部品を消した状態だとエラーがでなくなるようになる。それでもエラーが出るようであればまっさらの状態のStartViewControllerだけを配置する状態にする。などエラーが出ない状態から段階を踏んでいくとどの時点でエラーが発生するようになったかを確認できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問