该应用程序在启动后大约15秒崩溃,XCode刚刚在地址处断开,并弹出一个"Thread 6 com.apple.NSURLConnectionLoader:Program received signal:EXC_BAD_ACCESS"
我一直无法追踪问题.它在iOS 4上运行良好,但我猜这只是因为它更容忍bug或者其他东西.我已经尝试过在任何地方设置断点并逐步完成,在Zombies配置文件中的Instruments中运行它,但它只是炸弹而不告诉我在哪里.我没有警告和干净的分析,所以我有点不知所措.任何人都可以提供任何建议吗?谢谢.
回溯是:
(gdb) backtrace
#0 0x024fb939 in _dispatch_retain ()
#1 0x024fbc02 in dispatch_source_cancel ()
#2 0x0109e492 in _CFURLCacheDeallocate ()
#3 0x0205a4e3 in CFRelease ()
#4 0x010331b1 in HTTPProtocol::~HTTPProtocol ()
#5 0x0100c75d in CFClass::FinalizeObj ()
#6 0x0205a4e3 in CFRelease ()
#7 0x02110af0 in __CFDictionaryStandardReleaseValue ()
#8 0x020714b1 in __CFBasicHashDrain ()
#9 0x0205a4e3 in CFRelease ()
#10 0x01024237 in SocketStream::~SocketStream ()
#11 0x0100c75d in CFClass::FinalizeObj ()
#12 0x0205a4e3 in CFRelease ()
#13 0x01023e0b in SocketStream::finalize () …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Core Data编写Iphone应用程序,并且EXC_BAD_ACCESS在[managedObjectContext save:&& error]代码行中出现错误.只有在修改某些字段后才会发生此崩溃.更具体地说,我的实体有两个字符串字段(大约10个字段中的字段),它们从模式视图控制器(如文本编辑器)的返回中获取它们的值.崩溃也只发生在编辑这些字段之后,第一次将值放入其中工作正常.
我有格式构造函数字符串只有字符串的原因是因为我试图复制构造...不确定是否自动发生?想到可能会保留/释放来自那些字符串的消息(这两个来自模态视图控制器),在解雇模态视图控制器或其他东西时被释放.但不要猜测,因为它仍然不起作用.
这是崩溃的代码部分:
[EDITED]
- (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex: (NSInteger)buttonIndex
switch(buttonIndex) {
case 0: {
if(message == nil) {
message = [NSEntityDescription insertNewObjectForEntityForName:@"MailMessage" inManagedObjectContext:self.managedObjectContext];
}
message.toString = txtTo.text;
message.fromString = txtFrom.text;
message.subjectString = txtSubject.text;
message.backgroundColor = [NSNumber numberWithInt:[bgColor intValue]];
message.textArray = [NSString stringWithFormat:@"%@", stringTextArray];
message.htmlString = [NSString stringWithFormat:@"%@", stringHTML];
message.timeStamp = [NSDate date];
message.statusCode = [NSNumber numberWithInt:0];
NSError *error = nil;
if (![message.managedObjectContext save:&error]) {
abort();
}
break;
}
case 1: {
break;
}
}
if(buttonIndex …Run Code Online (Sandbox Code Playgroud) 我的应用程序运行正常并且符合预期,但出于某种原因,当我放置断点时,单步执行/结束/恢复会导致程序因EXC_BAD_ACCESS而崩溃.如果我删除/禁用断点,则不会发生这种情况.
有什么建议?
我正在尝试为iOS构建自己的信号和未捕获的异常处理程序.为此,我使用以下两个函数:
NSSetUncaughtExceptionHandler(/*handler*/);
Run Code Online (Sandbox Code Playgroud)
和
signal(/*signal const*/, /*signal handler*/);
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法使用EXC_BAD_ACCESS信号.是否有一些信号常量(如SIGABRT,SIGBUS)来捕获EXC_BAD_ACCESS?如果不是,我该如何处理?一些崩溃分析工具(lika PLCrashReporter,Crashlytics等)可以追踪它......
我在a中显示不同类型的内容,tableview并使用不同的自定义方法计算每个单元格的高度heightForRowAtIndexPath.
其中一个自定义方法意味着转换一些html NSMutableAttributedString,然后计算它的高度NSMutableAttributedString.
对于html转换,我使用新initWithData:方法.
一切都很完美,除非我旋转屏幕=>我每次都有一个exc_bad_access.
使用Instruments/Zombies,我已经能够找到错误,事实上就是这样initWithData:.
(当我删除此方法并创建一个"简单" NSMutableAttributedString时initWithString,我可以根据需要更改方向,crash不再有).
知道为什么吗?
(顺便说一句,我的项目使用ARC)
Instrument/Zombie截图:

调用的自定义方法heightForRowAtIndexPath:
<UtilitiesForFrontEndUI heightForFacebookAttributedText:>
+(CGFloat)heightForFacebookAttributedText:(NSString *)attributedText withWidth:(CGFloat)width
{
NSAttributedString *formatedText = [self formatRawFacebookContentForFrontEndRichTextContents:attributedText];
CGRect rect= [formatedText boundingRectWithSize:CGSizeMake(width, 1000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
return ceilf(rect.size.height);
}
Run Code Online (Sandbox Code Playgroud)
使用initWithData进行html NSMutableAttributedString转换的自定义方法:
<UtilitiesForFrontEndUI formatRawFacebookContentForFrontEndRichTextContents:>
+(NSAttributedString *)formatRawFacebookContentForFrontEndRichTextContents:(NSString *)stringToFormat
{
// THIS GENERATE EXC_BAD_ACCESS ON DEVICE ROTATION (WORKS IF NO ROTATION)
NSData *dataContent = [stringToFormat dataUsingEncoding:NSUTF8StringEncoding]; …Run Code Online (Sandbox Code Playgroud) 我正在计算生日和今天之间的月数.有了这个数字,我正在构建一个谓词来从核心数据中获取对象.虽然正确计算了月数(如日志所示),但在构建谓词时我得到了一个EXC_BAD_ACCESS.
这是我的代码:
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSMonthCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:birthdate
toDate:today options:0];
int months = [components month];
NSLog(@"months: %ld", (long)months);
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(alter_min_monat > %@)", months];
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我的程序显示一个水平滚动表面,从左到右平铺UIImageViews.代码在UI线程上运行,以确保新显示的UIImageViews分配了一个新加载的UIImage.加载发生在后台线程上.
一切都很好,除了每个图像变得可见时都有口吃.起初我以为我的后台工作者在UI线程中锁定了一些内容.我花了很多时间查看它,并最终意识到UIImage在UI线程第一次变得可见时正在做一些额外的延迟处理.这让我很困惑,因为我的工作线程有明确的解压缩JPEG数据的代码.
无论如何,在预感上,我写了一些代码,以渲染到后台线程上的临时图形上下文中 - 当然,口吃也消失了.UIImage现在正在我的工作线程上预先加载.到现在为止还挺好.
问题是我的新"强力懒惰的图像"方法是不可靠的.它会导致间歇性的EXC_BAD_ACCESS.我不知道UIImage在幕后实际上在做什么.也许它正在解压缩JPEG数据.无论如何,方法是:
+ (void)forceLazyLoadOfImage: (UIImage*)image
{
CGImageRef imgRef = image.CGImage;
CGFloat currentWidth = CGImageGetWidth(imgRef);
CGFloat currentHeight = CGImageGetHeight(imgRef);
CGRect bounds = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
CGAffineTransform transform = CGAffineTransformIdentity;
CGFloat scaleRatioX = bounds.size.width / currentWidth;
CGFloat scaleRatioY = bounds.size.height / currentHeight;
UIGraphicsBeginImageContext(bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM(context, scaleRatioX, -scaleRatioY);
CGContextTranslateCTM(context, 0, -currentHeight);
CGContextConcatCTM(context, transform);
CGContextDrawImage(context, CGRectMake(0, 0, currentWidth, currentHeight), imgRef);
UIGraphicsEndImageContext();
}
Run Code Online (Sandbox Code Playgroud)
并且EXC_BAD_ACCESS发生在CGContextDrawImage行上.问题1:我是否允许在UI线程以外的线程上执行此操作?问题2:什么是UIImage实际上"预加载"?问题3:解决这个问题的官方方法是什么?
感谢阅读所有这些,任何建议将不胜感激!
NSDictionaries在循环中创建并将其添加到一个循环中我遇到了麻烦NSMutableArray.
基本上我只想更改键的名称,但由于我找不到一个函数,我去了下面的代码:
- (NSMutableArray *)getCategoriesForChannel:(int)channelId {
NSDictionary *data = [self call:@"get_categories.ashx"];
NSArray *categories = [data objectForKey:@"categories"];
NSMutableArray *returnArray = [NSMutableArray
arrayWithCapacity:[categories count]];
for(NSDictionary *category in categories) {
[returnArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:
[category objectForKey:@"Channel_id"], @"id",
[category objectForKey:@"Channel_name"], "@name", nil]];
}
return returnArray;
}
Run Code Online (Sandbox Code Playgroud)
但是app总是在它到达addObject:方法时退出并抛出一个EXC_BAD_ACCESS.我认为它与内存管理有关,但由于我没有真正的C-background,我不知道如何解决这个问题.有人可以指出我正确的方向吗?提前致谢!
在更改一些UILabel的帧时,我有一个神秘的EXC_BAD_ACCESS.崩溃是随机的,通常我必须重复几分钟的条件.
启用NSZombies以及其他内存调试标志(NSDebugEnabled,MallocStackLogging)没有帮助,崩溃仍然保持不透明:只是一个BAD_ACCESS,控制台中没有消息.目标似乎是正确和活跃的,所以它看起来不像是一个解除分配的内存问题.
为了获得更多信息,我将UILabel子类化并重写了崩溃函数:
@implementation TestUILabel
- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event {
return [super actionForLayer:layer forKey:event];
}
@end
Run Code Online (Sandbox Code Playgroud)
它在super的方法中崩溃,但在检查时一切似乎都是正确的(打印retainCount为'self'和'layer'分别给出3和2):
(gdb)po self
<TestUILabel:0x6ac2800; baseClass = UILabel; frame =(173 174; 0 0); text ='54m²'; opaque = NO; autoresize = LM + TM; autoresizesSubviews = NO; userInteractionEnabled = NO; 动画= {position = <CABasicAnimation:0xe07ba60>; }; layer = <CALayer:0xbf1b950 >>
(gdb)po事件
界限
(gdb)po层
<CALayer:0xbf1b950; position = CGPoint(173 174); bounds = CGRect(0 0; 0 0); delegate = <TestUILabel:0x6ac2800; baseClass = UILabel; frame =(173 174; 0 0); text …
最近我开始添加我的应用程序IOS 10功能,而我遇到了一个奇怪的错误:
当我在嵌入式浏览器中单击facebook本身的确认按钮时,通过浏览器使用facebook SDK进行身份验证时,应用程序崩溃了.
不幸的是,这个bug没有提供信息,控制台没有告诉我任何关于它的信息,并且没有调用堆栈来查看发生此异常的位置.
用于演示此错误的两点导致:1.如果登录是通过系统帐户进行登录,但只有在浏览器中登录时才会出现此错误,如下图所示:

(一旦我点击OK,就会发生异常)
希望有人能够回答这个问题,或者想知道如何调试这种无信息的bug.提前谢谢,丽然.
exc-bad-access ×10
ios ×6
iphone ×4
xcode ×3
objective-c ×2
breakpoints ×1
calayer ×1
cgimage ×1
core-data ×1
debugging ×1
facebook ×1
ios10 ×1
ios7 ×1
lazy-loading ×1
nspredicate ×1
uiimage ×1
uiview ×1
xcode8 ×1