我究竟做错了什么?我不能让xmlparser停止解析.我设置了断点,[xmlParser abortParsing];然后运行.但是这之后的所有内容if(success)
都是我的代码:
-(void)viewDidLoad{
[NSThread detachNewThreadSelector:@selector(loadstuff)toTarget:self withObject:nil];
}
-(void)loadstuff{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
XMLParserdelegate *parserdeleagte = [[XMLParserdelegate alloc] init];
[xmlParser setDelegate:parserdelegate];
BOOL success = [xmlParser parse];
if(success){
NSLog(@"No Errors");
links = [[NSMutableArray alloc] initWithArray:links];
titles = [[NSMutableArray alloc] initWithArray:titles];
dates = [[NSMutableArray alloc] initWithArray:dates];
descriptions = [[NSMutableArray alloc] initWithArray:descriptions];
loading = FALSE;
[theTableView reloadData];
}else{
NSLog(@"Error parsing xml");
}
[pool release];
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[xmlParser abortParsing];
[xmlParser release];
xmlParser …Run Code Online (Sandbox Code Playgroud) HI,
我需要一个XML解析器.我想知道哪一个更快?NSXMLParser还是KissXML?
期待回复......
在我的NSXMLParser完成并从内存中释放后,我得到了一个奇怪的泄漏.
它提出了NSMapTable alloc leak.这是我的堆栈:
0 libSystem.B.dylib calloc
1 libobjc.A.dylib _internal_class_createInstanceFromZone
2 libobjc.A.dylib class_createInstance
3 Foundation NSAllocateObject
4 Foundation +[NSMapTable alloc] <===== this is the leak...
5 Foundation -[NSXMLParser initWithData:]
6 Foundation -[NSXMLParser initWithContentsOfURL:]
7 idispatch -[RootViewController parseXML:] /Developer/iPhone Apps/iDispatch/Classes/RootViewController.m:562 <================== this is my code calling
8 Foundation -[NSThread main]
9 Foundation __NSThread__main__
10 libSystem.B.dylib _pthread_start
11 libSystem.B.dylib thread_start
Run Code Online (Sandbox Code Playgroud)
想法?
欣赏你可以流下的任何光!
这是代码:
[NSThread detachNewThreadSelector:@selector(parseXML:)
toTarget:self
withObject:requestStr];
Run Code Online (Sandbox Code Playgroud)
它在自己的线程上调用此方法:
- (void)parseXML:(NSString*)theURL {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSXMLParser *parser = [[NSXMLParser alloc] …Run Code Online (Sandbox Code Playgroud) 我有几个视图解析从互联网上下载的xml.
仪器泄漏工具告诉我,当我在dealloc方法中释放数据成员时我有泄漏但不是当我放入[objectname release];内部时viewDidDissapear.
这是一个主要的罪吗?
来自ac/c ++背景我发现obj-c内存管理非常混乱!
编辑:这是代码:
#import "SuggestedFriendList.h"
@implementation SuggestedFriendList
@synthesize maincell,nationalityimageview, subjectimageview, accommodationimageview;
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
{
currentElement = [[elementName copy] autorelease];
if ([elementName isEqualToString:@"shared"])
{
tshared = [[NSMutableString alloc] init];
}
if ([elementName isEqualToString:@"fullname"])
{
tfullname = [[NSMutableString alloc] init];
}
if ([elementName isEqualToString:@"nationality"])
{
tnationality = [[NSMutableString alloc] init];
}
if ([elementName isEqualToString:@"subject"])
{
tsubject = [[NSMutableString alloc] init];
}
if ([elementName isEqualToString:@"accommodation"])
{ …Run Code Online (Sandbox Code Playgroud) 我收到警告::不兼容的指针类型在下面的代码中从'NSData'分配给'NSMutableData'
-(void) connectionDidFinishLoading:(NSURLConnection *) connection
{
NSLog(@"DONE. Received Bytes: %d", [webData length]);
NSString *theXML = [[[NSString alloc] initWithBytes: [webData mutableBytes] length [webData length] encoding:NSUTF8StringEncoding] autorelease];
theXML = [theXML stringByReplacingOccurrencesOfString:@"<" withString:@"<"];
theXML = [theXML stringByReplacingOccurrencesOfString:@">" withString:@">"];
NSLog(@"%@",theXML);
if( xmlParser )
{
xmlParser = nil;
[xmlParser release];
}
NSMutableString *str = [[NSMutableString alloc]initWithString:theXML];
webData = [str dataUsingEncoding:NSUTF16StringEncoding];//WARNING
xmlParser = [[[NSXMLParser alloc] initWithData:webData] autorelease];
[xmlParser setDelegate:self];
[xmlParser setShouldResolveExternalEntities: YES];
[xmlParser parse];
[connection release];
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
将NSXMLParser与CDATA一起使用
我NSXMLParser用来解析服务器上的xml数据.
当用户向另一个用户发送文本消息时,我的服务器正在使用CDATA标签来包装用户文本,因为用户文本可能会破坏xml结构.
我的问题是NSXMLParser知道如何自动处理CDATA吗?它是在NSXMLParser机制中构建的吗?
我从服务器数据中获取UTF8编码数据就好Less%20than%20100但我需要这些数据Less than 100(解码格式),我的NSXMLParsing委托方法就像
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"option"]) {
dict = [[NSMutableDictionary alloc]init];
[dict setValue:[attributeDict objectForKey:@"text"] forKey:@"text"];/* Here itself i need to decode & save in to my dict */
}
Run Code Online (Sandbox Code Playgroud)
如何解码这些数据.
这是我的方法体,用于解析由RSS源生成的格式错误的html创建的"img src"图像链接...我知道NSXML只解析XML,但我希望它可以偶然发现这些混乱来找到这些微不足道的内容来自凌乱的HTML的图像链接.
我正在尝试检索src属性中找到的第一个图像链接,我在nsData中的每个名为IMG的元素名称中找到具有src属性,然后将其保存到另一个类中的NSString*img.img标签并不完全相同,例如nsData的实例将只包含一个图像实例,就像其中任何一个一样:
<img class ="ms-rteStyle-photoCredit"src ="www.imagelinkthatineed.com" 我不需要的东西
<img alt =""src ="www.imagelinkineedfortableimagecellpreview" 我不需要的东西
<img class ="ms-rteStyle-photoCredit"src ="www.IneedThisLink.com" 更多我不需要的东西
唯一似乎生成NSLog输出的类是第一个.
如何让解析器方法实际运行?
鉴于有一种方法,你推荐一种不同的,更简单的方式吗?
#import "HtmlParser.h"
#import "ArticleItem.h"
@implementation HtmlParser
@synthesize elementArray;
- (HtmlParser *) InitHtmlByString:(NSString *)string {
// NSString *description = [NSString string];
NSData *nsData = [[NSData alloc] initWithContentsOfFile:(NSString *)string];
elementArray = [[NSMutableArray alloc] init];
parser = [[NSXMLParser alloc] initWithData:nsData];
parser.delegate = self;
[parser parse];
Run Code Online (Sandbox Code Playgroud)
如果我是NSLog(@"%@",nsData); 在此方法体中,输出吐出原始HTML.
currentHTMLElement = [ArticleItem alloc];
return self;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString …Run Code Online (Sandbox Code Playgroud) 我想等待NSXMLParser进程完成,然后继续其他进程.我使用NSXMLParser来解析XML数据.
这是我的代码:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
NSLog(@"Did start element");
if ( [elementName isEqualToString:@"FILENAME"])
{
XML_FIELD = FILENAME_CLOUD2;
NSLog(@"found rootElement");
return;
}
else if ( [elementName isEqualToString:@"UPLOADTIME"])
{
NSLog(@"found rootElement");
XML_FIELD = UPLOADTIME2;
return;
}
}
Run Code Online (Sandbox Code Playgroud)
didEndElement():
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@"Did end element");
if ([elementName isEqualToString:@"FILENAME"])
{
NSLog(@"rootelement end");
}
XML_FIELD = UNIMPORTANT2;
}
Run Code Online (Sandbox Code Playgroud)
foudCharaters():
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (XML_FIELD == FILENAME_CLOUD2)
{ …Run Code Online (Sandbox Code Playgroud) 我一直试图尝试使用NSXML解析器解析xml文件.因为我想使用NSXMLDocument类在其实例中存储数据.在以各种可能的方式搜索之后,我未能清楚地了解NSXMLDocument.我没有特别为此导入任何课程.我必须添加任何类或lib文件???
nsxmlparser ×10
iphone ×7
ios ×6
objective-c ×5
cdata ×1
escaping ×1
html ×1
ipad ×1
memory ×1
memory-leaks ×1
nsdata ×1
nsxml ×1
parsexml ×1
sdk ×1
xml ×1
xml-parsing ×1