0

接続の問題や 2G での接続の遅さなどがあるたびに、次のログでアプリがクラッシュします。

ここに画像の説明を入力

ログから取得できるのは、 のsendSynchronousRequestメソッドでクラッシュすることNSURLConnectionです。問題が何であるかを正確に知るにはどうすればよいですか?また、それを解決するにはどうすればよいですか? Apple から提供された到達可能性メソッドを配置しましたが、YESインターネットの到達可能性とホストの到達可能性の両方に戻ります。ただ、インターネット接続が非常に遅いです。高速接続 (Wifi) では、問題なく動作します。

編集:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[window setFrame:[[UIScreen mainScreen] bounds]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//singleton
u=[[U5 alloc]init];
m_tUSyncPersistableConfig  = [[USyncPersistableConfig alloc] init] ;    
    m_commonObj = [[CommonClass alloc] init] ;
u.m_tUSyncPersistableConfig=m_tUSyncPersistableConfig;
    u.commonObj = m_commonObj;


 //register for push notifications
   [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

 //load persisting data : from sqlite database
[u loadPreferences:m_tUSyncPersistableConfig];


window.rootViewController = tabBarController;

[window makeKeyAndVisible];


  if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"]) {
       //first launch//setting some values
  }else {
        //not first launch
}

    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"] || [u.m_tUSyncPersistableConfig.mUserName isEqualToString:@""] || !u.m_tUSyncPersistableConfig.mUserName)
{
    // This is the first launch ever
    //present login page

}
else
{
    // app already launched
  [[u commonObj] performSelectorInBackground:@selector(getAccountInfo) withObject:nil];
}

return YES;
}
4

2 に答える 2

1

同期 NSURLConnection Web リクエストから離れることを強くお勧めします。これは Apple によって推奨されておらず、デザインが悪いと見なされています。非同期リクエストに移行することをお勧めします。これにより、問題が回避される可能性があり、NSURLConnection デリゲート メソッドでエラーを処理できます。

于 2013-01-17T07:49:26.017 に答える
1

バックグラウンド スレッドで同期要求を実行することは、通常は問題ありません。

しかし、クラッシュ レポートは、同期要求がメイン スレッドで実行されていることを示しています。そのため、バックグラウンド スレッドで実行していない場所が少なくとも 1 つあります。メイン スレッドでは UI がブロックされ、iOS ウォッチドッグ プロセスがこれに気づき、起動時にアプリを強制終了します。

したがって、メイン スレッドで同期要求を使用していないことを確認してください。

あなたはこれをやっていると言っていますが、間違っているかもしれません。実際に接続メソッドを呼び出しているコードを表示します。クラッシュ レポートをシンボル化すると、スレッド 0 スタック トレースのフレーム 8 から 10 にこれらの場所も表示されます。

于 2013-01-17T11:48:12.197 に答える