0

每当出现连接问题、2G 连接速度慢等情况时,我的应用程序都会崩溃并显示以下日志:

在此处输入图像描述

我可以从日志中得到的是,它sendSynchronousRequestNSURLConnection. 我怎么知道到底是什么问题,我该如何解决?我已经使用了 Apple 提供的 Reachability 方法,但同时返回YES了 Internet 可访问性和主机可访问性。只是互联网连接速度很慢。在快速连接 (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

在后台线程中运行同步请求通常很好。

但是崩溃报告显示同步请求正在主线程上运行。因此,至少有一个位置您没有在后台线程中运行它。在主线程上,它将阻塞 UI,iOS 看门狗进程会注意到这一点并在启动时终止应用程序。

因此,请确保您永远不会在主线程上使用同步请求!

你说你正在这样做,但也许你做错了。显示实际调用连接方法的代码。如果您对崩溃报告进行符号化,它还将在线程 0 堆栈跟踪的第 8 帧到第 10 帧中显示这些位置。

于 2013-01-17T11:48:12.197 回答
1

我强烈建议不要使用同步 NSURLConnection 网络请求。Apple 不推荐它,并且被认为是糟糕的设计。我建议转向异步请求——它可能会回避您的问题,并且您可以使用 NSURLConnection 委托方法处理错误。

于 2013-01-17T07:49:26.017 回答