2017-07-19 6 views
1

xcode 9.3 betaを使用してflurryを実装すると、バックグラウンドスレッドで呼び出されたUI APIに関する警告が発生します。メインスレッドのみから呼び出される必要があります。iOS Flurry:バックグラウンドスレッドから呼び出されたUI API

これを避けるために何をすべきか考えてください - それは慌てて解決するだけですか?アプリデリゲートで使用

コード:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    let builder = FlurrySessionBuilder.init() 
             .withAppVersion("1.0") 
             .withLogLevel(FlurryLogLevelAll) 
             .withCrashReporting(true) 
             .withSessionContinueSeconds(10) 

    // Replace YOUR_API_KEY with the api key in the downloaded package 
    Flurry.startSession("YOUR_API_KEY", with: builder) 
    return true 
} 
+0

リンクの代わりにスクリーンショットを追加します。 – KKRocks

+0

は、 – RSN

+0

のスクリーンショットを追加しました.iOS 11の公開時に、APIの開発者は、バックグラウンドスレッドを使用しないように更新することを約束しています。 – RSN

答えて

5

はこれを試してみてください:

dispatch_async(dispatch_get_main_queue(), ^{ 
// add UI related changes here 
    }); 

スウィフト

のObjective C

DispatchQueue.main.async { 
// add UI related changes here 
} 
+0

ありがとう、私は、アプリケーションデリゲートで使用されているコードを追加しました:メインスレッドを使用するにはどのようにこれを書き直しますか? – RSN

+0

あなたはappdelegateで追加する必要はありません。 UI関連の変更を追加したブロック内にUI関連のコードを追加する必要があります。 – KKRocks

+0

私はあなたが慌ててそれをどうやってやるのか考えていませんか? – RSN

0

バックグラウンドスレッドでUI操作を実行しないでください。それはメインスレッド上にあるはずです。

メインのキューにUIの更新コードを移動します。 NSOperationQueueまたはGCDを使用できます。 NSOperationQueue vs GCD

NSOperationQueue

オブジェクティブC:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
     // UI update code here. 
}]; 

スウィフト

OperationQueue.main.addOperation { 
    // UI Update code here 
} 

GCD

のObjective C

dispatch_async(dispatch_get_main_queue(), ^{ 
     // UI update code here. 
}); 

スウィフト

DispatchQueue.main.async { 
    // UI Update code here 
} 
+0

ありがとう、私は、アプリケーションデリゲートで使用されるコードを追加しました:メインスレッドを使用するにはどのようにこれを書き直しますか? – RSN

0

APIの開発者は、iOS 11がライブになったとき、それがバックグラウンドスレッドを使用しないで作るの更新を行うことが期待されています。

+0

リファレンスhttps://github.com/flurry/flurry-ios-sdk/issues/91 –

関連する問題