我搜索并尝试了很多。但我真的不知道如何解决这个问题 - 感谢您的帮助
错误-MSG:
Program received signal: “EXC_BAD_ACCESS”.
线投掷MSG
log(sos_Trace, @"sendMail");
重要
我使用了这个logging-lib:http://code.google.com/p/soslog-objc/
完整的SourceFile
#import "ContactViewController.h"
#import "SOSLog.h"
@implementation ContactViewController
@synthesize mailButton, delegate;
- (void)viewDidLoad {
self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"bg_tile.gif"]];
[super viewDidLoad];
}
- (IBAction)sendMail:(id)sender {
NSLog(@"sendMail");
log(sos_Trace, @"sendMail");
[delegate mail:self];
}
- (void)dealloc {
[self.mailButton release];
self.delegate = nil;
[super dealloc];
}
@end
答案 0 :(得分:2)
看一下SOS日志记录框架的来源,log(sos_Trace, @"sendMail");
不可能是崩溃的来源,除非你有其他地方的代码破坏了日志记录基础设施的内部。
发布崩溃的完整堆栈跟踪。
正如@benzado所说,你的内存管理代码中有一些错误。解决这些问题。我建议在代码上运行静态分析器并修复它找到的任何内容。 Xcode中的shift-cmd-A应该可以解决问题。
此外,如果您想在调用方法时进行记录,这将在任何方法中起作用:
log(sos_Trace, NSStringFromSelector(_cmd));
或者:
NSLog(@"[%@ %@] -- your message here", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
答案 1 :(得分:1)
之前我没有使用过soslog框架,因此我无法提供任何见解。但是,EXC_BAD_ACCESS通常是由于尝试访问已被dealloc'd或从未初始化的对象而引起的。在你打电话之前已经设置了sos_Trace吗?
答案 2 :(得分:1)
EXC_BAD_ACCESS
表示您尝试访问无效地址的内存。当您尝试使用尚未初始化的指针并指向内存中的某个随机位置时,通常会发生这种情况。
我对该日志库一无所知,但我猜想有一些你需要调用的设置或初始化函数。但是看看网站似乎并不存在。
另一个突出的事情,虽然可能没有关系,但行
[self.mailButton release];
在您的dealloc
方法中。这可能不是问题,因为它在你的dealloc方法中,但是如果你要使用属性访问器,你应该保留并释放它。如果您在任何其他地方有该行,如果重新分配了mailButton属性,则稍后会导致EXC_BAD_ACCESS。那是因为:
self.mailButton = THING; // retain count +1
[self.mailButton release]; // retain count -1
self.mailButton = OTHER; // EXC_BAD_ACCESS!
那是因为第三行实际上是对setMailButton:
的调用,内部调用[THING release]
,但是由于你已经释放了它,你现在已经使你的保留/释放调用失去平衡,所以当时或之后(如果其他人保留了它),将在无效对象上调用release,并且你的程序会变成kablooey。
答案 3 :(得分:0)
修正了错误。由于缺少保留,套接字被解除分配。