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

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

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

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

解決済

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

EricaChloe
EricaChloe

総合スコア8

Swift

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

2回答

0リアクション

1クリップ

249閲覧

投稿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

@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { let ud = UserDefaults.standard let dict = ["firstLaunch": true] ud.register(defaults: dict) if ud.bool(forKey: "firstLaunch"){ ud.set(false, forKey: "firstLaunch") print("初回起動") let viewControllers = ViewController(nibName: "StartViewController", bundle: nil) window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = viewControllers window?.makeKeyAndVisible() } print("初回起動ではない") //tabbar 配列 var viewControllers: [UIViewController] = [] //1ページ目 let firstTab = AttendanceView() firstTab.tabBarItem = UITabBarItem(title: "attend", image: UIImage(named: "dash"), tag: 1) viewControllers.append(firstTab) //2ページ目 let secondTab = ChangeAttend() secondTab.tabBarItem = UITabBarItem(title: "status", image: UIImage(named: "pin"), tag: 2) viewControllers.append(secondTab) //セット let tabBarController = UITabBarController() tabBarController.setViewControllers(viewControllers, animated: false) let colorKey = UIColor(red: 249/155, green: 161/255, blue: 188/255, alpha: 1.0) UITabBar.appearance().tintColor = colorKey window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = tabBarController window?.makeKeyAndVisible() return true }

試したこと

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

解決方法

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

AttendanceView

override func viewDidAppear(_ animated: Bool) { if ud.object(forKey: "Number") == nil { print("ud ない") let vc = StartViewController() self.present(vc, animated: true, completion: nil) } else { print("ud ある") } }

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Swift

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