2016-10-24 4 views
2

私は snapshotを使用して、App Storeに提出しようとしているアプリのスクリーンショットを作成しています。ファストレーンスナップショットでUserDefaultsを読むのが難しい

ほとんどの場合、「広告として」動作しますが、私のアプリケーション内のUserDefaultsにアクセスするのは好きではないようです。 1つのテストでは、終了ステータス:65が生成されます。

UI Testing Failure - com.me.MyApp crashed in (extension in MyApp):__ObjC.NSObject.defaultTime() -> Swift.Float

私は、構文エラーのための招待にUserDefaults.standard.value(forKey: "defaultTime")を見つけたので、私はUserDefaultsにアクセスするための拡張機能を作成しました。私はdefaultTimeを必要とする時はいつでも、私はちょうどdefaultTime()を入力し、アプリWihin

class CustomExtensions: NSObject { 
    /* 
    This is blank. Nothing else in here. No really...nothing else 
    */ 
} 

extension NSObject { 
    // User Defaults  
    func defaultTime() -> Float { 
     return UserDefaults.standard.value(forKey: "defaultTime") as! Float 
    } 

    // a bunch of other UserDefaults  
} 

:ここでは拡張子は次のようになります。このメソッドを使用してUserDefaultsの値にアクセスすると、シミュレータとテストしたデバイスで正常に動作します。私はsnapshotの問題に遭遇します。

テスト中にsleep(1)で追加しようとしましたが、何もしないようです。私は提案を再度歓迎します:UserDefaultsにアクセスするための代替手段は、MyApp全体に容易にアクセスできるようにすることです。

答えて

3

おそらく起こっているのは、シミュレータとデバイスで、キーdefaultTimeのユーザーデフォルトに値を書き込んでから読み込むことです。 value(forKey:はオプションですが、強制的に展開したり(ここで行っているようにダウンキャストを強制する)、値がnilの場合はクラッシュします。いずれかのオプションを戻してください:

func defaultTime() -> Float? { 
    return UserDefaults.standard.value(forKey: "defaultTime") as? Float 
} 

またはデフォルト値使用:

func defaultTime() -> Float { 
    return UserDefaults.standard.value(forKey: "defaultTime") as? Float ?? 0.0 
} 
+0

素晴らしいを!私は 'nil coalescing operator'sについてはhttps://www.hackingwithswift.com/read/12/2/reading-and-writing-basics-userdefaultsを読んでいました。それでこの問題は解決しました。私は右のセルをクリックするようにテストを調整しなければなりません...少し楽になります:)ありがとう! – Adrian

+1

私の初期のデフォルトは 'AppDelegate.swift'で設定されています。あなたの解決策が私の問題を解決したことは、UIテストがAppDelegateをスキップすることを示しています。私はそれを推測したことはありませんでした。うまくいけば、このコメントの誰かがさらに下にコメントしてください。 – Adrian

関連する問題