当我尝试创建方法实例时,我收到了EXC_BAD_ACCESS错误。
UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(40,38,240,203)];
DetailImageViewDataSource *detail=[[DetailImageViewDataSource alloc] init];//**error line**
@implementation DetailImageViewDataSource
@synthesize webdata,xmlParser,soapResults,newImage;
-(void) startParsing
{
recordResults=FALSE;
NSString *soapMessage=[NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
"<soap:Body>\n"
"<GetImage xmlns=\"http://tempuri.org/\">\n"
"<imageID>f89df9ad-5a5d-4354-895f-356d8ce4ccfb</imageID>\n"
"</GetImage>\n"
"</soap:Body>\n"
"</soap:Envelope>\n"];
//http://192.168.2.7/ImageWebService/Service1.asmx
//http://192.168.2.7/ThesisWebServicesNew1/Service.asmx
NSLog(soapMessage);
NSURL *url=[NSURL URLWithString:@"http://192.168.2.7/ThesisWebServicesNew1/Service.asmx"];
NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:url];
NSString *msgLength=[NSString stringWithFormat:@"%d",[soapMessage length]];
[theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue:@"http://tempuri.org/GetImage" forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if(theConnection)
{
webdata=[[NSMutableData data] retain];
NSLog(@"got connected");
}
else
{
NSLog(@"No Cnnection");
}
//[nameinput resignFirstResponder];
}
初始化代码
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
}
UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(40,38,240,203)];
[img setImage:[UIImage imageNamed:@"LARCbackground.png"]];
UITableView *tableView1=[[UITableView alloc] initWithFrame:CGRectMake(20,266,280,136) style:UITableViewStylePlain];
[tableView1 setDelegate:self];
[tableView1 setDataSource:self];
[tableView1 setAlpha:0.75];
[tableView1 setBackgroundColor:[UIColor clearColor]];
[[self view] addSubview:tableView1];
[tableView1 dealloc];
[[self view] addSubview:img];
[img dealloc];
//[imageView setImage:];
//[[self view] addSubview:imageView];
return self;
}
我在这里应用了一个断点,当我点击继续时,我得到了exe_bad_access错误。
我正在尝试创建一个xmlparser类的对象。
现在已经持续了几个小时......没有成功。请帮忙..
答案 0 :(得分:16)
此代码存在许多问题,其中任何一个都可能导致崩溃。没有看到回溯就很难分辨出来。
您的初始化程序错误:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
}
UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(40,38,240,203)];
....
return self;
}
if和return之间不应该有任何代码。如果对super的调用失败会怎么样?在您的代码中,无论如何都将继续初始化实例。那肯定会破裂。
您对NSLog()的调用很危险:
NSLog(soapMessage);
如果soapMessage
碰巧包含%@
或%s
,则可以保证崩溃。
您正在直接调用-dealloc
。两次。将要释放的对象添加到视图层次结构后立即。
[[self view] addSubview:tableView1];
[tableView1 dealloc];
[[self view] addSubview:img];
[img dealloc];
这肯定会导致崩溃,因为解除分配的对象现在位于视图层次结构中。一旦你的应用尝试渲染任何东西,*** BOOM ****。
您永远不会直接致电-dealloc
。 (你的意思是-release
,对吗?)
在评论中,您说崩溃就在DetailImageViewDataSource *detail=[[DetailImageViewDataSource alloc] init];
行。该行未出现在粘贴的源中。同样,所有初始化逻辑都在-initWithNibName:bundle:
。
您确定您的对象是否正确初始化了吗?
修复所有这些,然后查看您的崩溃是否仍然发生。如果是,请发布崩溃的堆栈跟踪。