2010-01-11 3 views
1

XML을 구문 분석하고 특성이 선언되고 보존되고 합성 된 문자열에 파싱 된 데이터를 저장했으며 값은 파싱하는 동안이 문자열로 전달되지만 파서를 마친 후에는 무효화됩니다. 파싱. 다른 IBAction 메서드에서 액세스 할 수 없습니다. EXE BAD ACCESS 오류가 발생합니다. 내 경험으로 볼 때 디버거가 잘못된 메모리에 액세스 할 때 발생한다고 생각합니다.파서 완료 후 문자열이 무효화되었습니다. iphone

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    
//NSLog(@"found this element: %@", elementName); 
currentElement = [elementName copy]; 
if ([elementName isEqualToString:@"resp"]) { 
    // clear out our story item caches... 
} 
else if ([currentElement isEqualToString:@"org"]) { 
    name = [attributeDict objectForKey:@"fileid"]; 
    extention = [attributeDict objectForKey:@"extension"]; 
    NSLog(@"image named %@ of type %@",name,extention); 
} 
else if ([currentElement isEqualToString:@"photo"]) { 
    photoid = [attributeDict objectForKey:@"photoid"]; 
    NSLog (@"photo id = %@",photoid); 
}  

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    //NSLog(@"found characters: %@", string); 
    // save the characters for the current item... 
    if ([currentElement isEqualToString:@"userid"]) { 
     userid =[NSString stringWithString:string]; 
     NSLog (@"user id = %@",userid); 
     } 
    else if ([currentElement isEqualToString:@"albumid"]) { 
     albumid =[NSString stringWithString:string]; 
     NSLog (@"album id = %@",albumid); 
    } 
} 

이 부분은 잘 작동되지만

- (IBAction)download { 
    NSString *urlstr = [NSString stringWithFormat:@"http://staging-data.mysite.com/%@/albumphoto/%@/%@/%@.%@",userid,albumid,photoid,name,extention]; 
    NSLog(urlstr); 
    NSURL *url= [NSURL URLWithString:urlstr]; 
    NSData *imgdata = [[NSData alloc]initWithContentsOfURL:url]; 
    UIImage *img = [UIImage imageWithData:imgdata]; 
    newImage.image=img; 
    [imgdata release]; 

} 

이것은 오류가 발생. pls 도움

+0

문제를 진단하는 데 도움이되도록 출력, 로그 및 실제 오류 메시지와 그 행이 포함되어 있는지 확인하십시오. 또한 '사진'이라는 문자열을 저장하지 않고 URL에 좋은 값으로 알고있는 것을 제공하는 등 오류를 표시하는 가장 작은 것으로 줄이기 위해 노력하십시오. 그래도 오류가 발생합니까? –

+0

'objc_message sent'는 – Nithin

+0

으로 표시됩니다. 동작 메서드 내에서 하드 코드 된 문자열에 값을 지정하면 충돌이 발생하지 않습니다. 문제는 분명히 그 문자열이 0이되지 않게하는 것입니다. – Nithin

답변

1

당신이주의 깊게 살펴 라인 : 당신이 사본을 제안하고, 그 유지 등을 유지, 그것을 복사하지 않고 XML 파서에 의해 소유 NSString에 속성을 설정

name = [attributeDict objectForKey:@"fileid"]; 

.

내 관심사는 XML 파서가 없어지면 과 photoid과 함께 name 문자열이 걸립니다.

+0

보유가 필수이며 thnx – Nithin

+0

필요할 때 그것을 놓아주는 것을 잊지 마라! –

0

종료 태그가 발생한 시점을 알기 위해이 방법을 구현해야합니다.

  • (무효) 파서 (NSXMLParser *) 파서 didEndElement : (있는 NSString *)가 elementName 이름 공간 URI가 (있는 NSString *) 이름 공간 URI qualifiedName가 : 나는 제안 (있는 NSString *)는 QNAME
+0

나는 그 것을 포함 시켰습니다. 그러나 그 안에는 아무 것도 없습니다. 빈 것입니다. – Nithin

+0

예, 파서에게 요소의 끝으로 이동한다는 것을 알리는 위임 메서드입니다. 요소가 없으면 모든 배열에 개체를 추가해야합니다. – raaz

+0

파서에서 발생한 오류를 알기 위해이 위임 메서드를 구현합니다. - (void) 파서 : (NSXMLParser *) 구문 분석기 parseErrorOccurred : (NSError *) parseError – raaz

관련 문제