Imagepair對象是其他類的成員變量..每次調用getImageURLs函數(請求網頁並分析其元素)時,我都希望更改其成員。它第一次工作正常,但如果我第二次在同一個對象上調用該函數,應用程序崩潰並給我留下一個EXC_BAC_ACCESS異常。我的猜測是,我在內存管理方面做了一些錯誤,但我無法弄清楚什麼,因爲我有Java背景,並且不習慣手動進行內存管理。異常類型:EXC_BAD_ACCESS(SIGBUS)
@implementation Imagepair
@synthesize imageLeft;
@synthesize imageRight;
@synthesize imageURLLeft;
@synthesize imageURLRight;
@synthesize idLeft;
@synthesize idRight;
//get random imagepair link
- (void) getImageURLs{
NSLog(@"Get random imagepair from server");
NSError *error = nil;
NSURL *url = [NSURL URLWithString:cSERVER_GET_RANDOM_IMAGE];
ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:url];
[request startSynchronous];
//init HTML-parser
HTMLParser *parser = [[HTMLParser alloc] initWithString: [request responseString] error:&error];
//check for error
if (error) {
NSLog(@"Error: %@", error);
}
//get body-node
HTMLNode *bodyNode = [parser body];
//get all link-nodes
HTMLNode *success = [bodyNode findChildTag:@"success"];
HTMLNode *imgurl1 = [success findChildTag:@"imgurl1"];
HTMLNode *imgurl2 = [success findChildTag:@"imgurl2"];
HTMLNode *imgid1 = [success findChildTag:@"imgid1"];
HTMLNode *imgid2 = [success findChildTag:@"imgid2"];
HTMLNode *imgvotes1 = [success findChildTag:@"imgvotes1"];
HTMLNode *imgvotes2 = [success findChildTag:@"imgvotes2"];
//read content and set members
[self setImageURLLeft:[imgurl1 contents]];
[self setImageURLRight:[imgurl2 contents]];
votesLeft = [[imgvotes1 contents] intValue];
votesRight = [[imgvotes2 contents] intValue];
[self setIdLeft:[imgid1 contents]];
[self setIdRight:[imgid2 contents]];
[self setImageLeft:[self requestImage:imageURLLeft]];
[self setImageRight:[self requestImage:imageURLRight]];
[request release];
[parser release];
}
//returns an UIImage for an URL
-(UIImage *)requestImage:(id)url{
NSURL *imgURL = [NSURL URLWithString:url];
NSData *data = [NSData dataWithContentsOfURL:imgURL];
UIImage *image = [[UIImage alloc] initWithData:data];
return image;
}
}
我們需要知道如何定義各種@屬性(分配,保留,複製等)。如果可以,也張貼堆棧跟蹤。 – NSGod 2011-06-01 12:48:25
發現問題,是在另一個類中,我發佈了一個對象,它在一個autorelease池中。謝謝蘋果提出這樣的解釋錯誤消息:/ – dschihejns 2011-06-01 14:40:45