내가 뭘 잘못하고 있는지 잘 모르겠다. 다음과 같은 XML 트리로 연결되는 URL이 있습니다.XMLParser Advice
<result>
...
<title>
...
</title>
<body>
...
</body>
...
</result>
파일을 구문 분석하고 제목과 본문을 가져와야합니다. 여기 Object.m됩니다
#import <Foundation/Foundation.h>
@interface Object : NSObject
{
NSString *title;
NSString *description;
}
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *description;
@end
: 그리고 여기 내 object.h입니다
#import <Foundation/Foundation.h>
#import "Object.h"
@interface XMLParser : NSObject <NSXMLParserDelegate>
{
NSMutableString *currentNodeContent;
NSMutableArray *arrayOfObjects;
NSXMLParser *parser;
Object *currentObject;
}
@property (readonly, retain) NSMutableArray *arrayOfObjects;
-(id) loadXMLbyURL:(NSString *)urlString;
@end
그리고 마지막으로, XMLParser.m : 여기
#import "Object.h"
@implementation Object
@synthesize title, description;
-(void) dealloc
{
[title release];
[description release];
[super dealloc];
}
@end
내 XMLParser.h이다
#import "XMLParser.h"
#import "Object.h"
@implementation XMLParser
@synthesize arrayOfObjects;
-(id) loadXMLbyURL:(NSString *)urlString
{
arrayOfObjects = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[[NSData alloc] initWithContentsOfURL:url] autorelease];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;
}
-(void) dealloc
{
[parser release];
[super dealloc];
}
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"result"])
{
currentObject = [Object alloc];
}
}
-(void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if([elementName isEqualToString:@"title"])
{
currentObject.title = currentNodeContent;
}
if([elementName isEqualToString:@"body"])
{
currentObject.description = currentNodeContent;
}
if([elementName isEqualToString:@"result"])
{
[arrayOfObjects addObject:currentObject];
[currentObject release];
currentObject = nil;
[currentNodeContent release];
currentNodeContent = nil;
}
}
-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
@end
내 주요 코드에서 XML pa를 호출합니다. 이 같은 rser :
xmlParser = [[XMLParser alloc] loadXMLbyURL:@"www.websiteWithXML.com"];
그러나 아무것도 내 arrayOfObjects (I가있는 tableview 내 배열만큼의 행을 가지고 말할 때, 어떤 행이 없기 때문에 나는 이것을 알고)에 배치되고 있지 않습니다.
도와주세요! 미리 감사드립니다.
왜 배열에 읽기 전용 속성을 지정 했습니까 ...? non-atomic을 시도하십시오 –
나는이 튜토리얼을 따라 갔다. http://www.theappcodeblog.com/2011/05/09/parsing-xml-in-an-iphone-app-tutorial/ – jisturiz
그것은 훌륭하게 작동했지만, 내 사용을 위해 ... 그것은 나던 작동하지 않습니다! – jisturiz