我已经在iOS上编程了3年,大量使用核心数据。但是,我以前从来没有遇到像这样的崩溃,也不知道为什么会这样。这个当前的应用程序只有4个非常简单的视图控制器,只保存到nsdefaults大约5个不同的时间。我感到困惑的错误是“关键ClientState的慢速默认访问时间为0.037632秒,容差为0.020000”。我已经注意到我的代码中的问题在于我的代码中存在的问题。此外,在视图控制器加载后很长时间。按下按钮后会发生此过程。最后,这种崩溃只发生了一半的时间,这意味着有时代码实际上没有崩溃。
NSUserDefaults *ab = [NSUserDefaults standardUserDefaults];
NSString *frcrat = [ab objectForKey:@"frcrat"];
NSString *lapper = [alertView textFieldAtIndex:0].text;
spinner.hidden = NO;
[spinner startAnimating];
delem = NULL;
delem = [[NSMutableArray alloc] init]; //Line after this line gives error Thread 1: Exc_bad_access (code = 1, address=0xe0bb2f85)
NSString *urlString = [[NSString stringWithFormat:@"http://www.mywebsite.com/enum.php?fracat=%@&num=%@&sap=%@", frcrat, lapper, _sna]stringByAddingPercentEscapesUsingEncoding : NSUTF8StringEncoding ];
NSXMLParser *Parser = [[[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]] autorelease];
[Parser setDelegate:self];
[Parser parse];
答案 0 :(得分:1)
我假设此代码放在视图控制器初始化的某个位置。
您获得的警告意味着视图控制器加载时间过长,这显然是由于代码中的initWithContentsOfURL:
调用。
正如您可以阅读here,initWithContentsOfURL:
阻止,这意味着您永远不应该在主线程上调用它。您应该异步执行XML解析器初始化。类似的东西:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *urlString = [[NSString stringWithFormat:@"http://www.mywebsite.com/enum.php?fracat=%@&num=%@&sap=%@", frcrat, lapper, _sna]stringByAddingPercentEscapesUsingEncoding : NSUTF8StringEncoding ];
NSXMLParser *parser = [[[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]] autorelease];
[parser setDelegate:self];
[parser parse];
}
答案 1 :(得分:0)
它甚至与nsuser默认值无关。这是因为字符串_sna。我改为在nsuserdefaults中保存该字符串,并在需要时将其重新加载为NSString * snameri。感谢Apple调试器给我一个不恰当的错误。