标签: nsxmlparser

iPhone:在背景中解析多个XML与NSXMLParser相互干扰

当我在iPhone上使用NSXMLParser解析XML时,我有一个奇怪的问题.启动应用程序时,我想预先加载4个表视图,这些视图在后台由RSS-Feeds填充.

当我逐个启动表视图时,而不是加载,解析和显示所有的工作,如魅力.但是当我尝试一次(同时)初始化所有视图时,看起来XML-parser-instances互相干扰.不知何故,来自一个XML-Feed的数据被"广播"到其他不属于的xml-parser实例中.示例:有一个"团队成员"项目,"这是我的名字".当这个错误发生时,添加了另一个xml-feed的字符串,即导致:"这是我的名字58",其中58是来自另一个视图的图表位置.在另一个例子中,"58"似乎错过了.

在我看来,由于NSXMLParser委托方法,这个错误发生了:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    if (!currentStringValue) {
        currentStringValue = [[NSMutableString alloc] initWithCapacity:50];
    }
    [currentStringValue appendString:string];   
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,"通过巧合"字节被附加到不属于它们的字符串.

奇怪的是,NSXMLParser的每个实例都是唯一的,有自己独特的委托,附加到自己的ViewController.每个解析请求产生它自己的后台任务,它有自己的(也是唯一命名的)自动释放池.

我在ViewController中调用NSXMLParser:

// prepare XML saving and parsing
currentStringValue = [[[NSMutableString alloc] initWithCapacity:50] retain];    
charts = [[NSMutableArray alloc] init];

NSURL *url = [[NSURL alloc] initWithString:@"http://(SOME XML URL)"];
xmlParser = [[[NSXMLParser alloc] initWithContentsOfURL:url] retain];

//Set delegate
[xmlParser setDelegate:self];

//loading indicator 
progressWheel = [[[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(150.0,170.0,20.0,20.0)] autorelease];
progressWheel.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;

[self.view addSubview:progressWheel];
[progressWheel startAnimating];

// start loading and …
Run Code Online (Sandbox Code Playgroud)

iphone background multiple-instances nsxmlparser

0
推荐指数
1
解决办法
3662
查看次数

有没有办法在条件下破坏NSXMLParser?

我有一个关于nsxmlparser的简单问题.

这是我的片段

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) string{
    [...]
    if ([currentElement isEqualToString:@"openpos"]) {
        if ([string isEqualToString:@"0"]) {
            // I WOULD EXIT FROM LOOP HERE!
            return;
        }
    }
    [...]
}
Run Code Online (Sandbox Code Playgroud)

为什么这种回归不起作用
我需要退出解析器方法并返回我的类错误!

我需要强制例外吗?或者有更好的方法来破解解析器循环?

谢谢,
阿尔贝托

iphone objective-c nsstring nsxmlparser xml-parsing

0
推荐指数
1
解决办法
285
查看次数

从我的字符串中删除空格

这是我的字符串..如何在java中使用reg exp删除空格

 08h03         Data1                Data2       Data3        Data4           5   
Run Code Online (Sandbox Code Playgroud)

有没有办法我已经尝试过替换("","");

java regex nsxmlparser

0
推荐指数
1
解决办法
1387
查看次数

从应用程序委托访问数组

我在应用程序委托中声明了1个数组

@property(strong,nonatomic)NSMutableArray *books;  
Run Code Online (Sandbox Code Playgroud)

我在XMLParser.m中向此数组添加了对象

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

    if([elementName isEqualToString:@"Books"])
        return;
    NSLog(@"i m in didEndElement");

    if([elementName isEqualToString:@"Book"]) {
        [appDelegate.books addObject:aBook]; //here i have added objects to array

        [aBook release];
        aBook = nil;

        NSLog(@"books=%@",appDelegate.books);
    }
    else 
        [aBook setValue:currentElementValue forKey:elementName];

    [currentElementValue release];
    currentElementValue = nil;
}
Run Code Online (Sandbox Code Playgroud)

我已经在XMLParser.h中声明了这个数组

@interface XMLParser : NSObject {
    NSMutableString *currentElementValue;

    AppDelegate *appDelegate;
    Book *aBook; 
}
Run Code Online (Sandbox Code Playgroud)

现在我必须在BooksDetailViewController.m中访问此数组,如何访问此数组.简而言之,我如何从应用程序委托访问数组到BooksDetailViewController

iphone nsxmlparser ios

0
推荐指数
1
解决办法
166
查看次数

NSXMLParser在Objective-C中解析数字和中文字符

这是我的XML:

<?xml version="1.0" encoding="UTF-8"?>
<Tests>
    <Test case="1">
        <str>200000</str>
    </Test>
    <Test case="2">
        <str>200thousand</str>
    </Test>
    <Test case="3">
        <str>?20?</str>
    </Test>
    <Test case="4">
        <str>20?</str>
    </Test>
</Tests>
Run Code Online (Sandbox Code Playgroud)

这是解析器的一部分,这是非常标准的,因为我在大多数教程中都找到了它:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    if(!currentElementValue)
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    else
        currentElementValue = 
            (NSMutableString *) [string stringByTrimmingCharactersInSet:
                [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
Run Code Online (Sandbox Code Playgroud)

然后我使用这一行将每个currentElementValue解析为testObj的每个变量

[testObj setValue:currentElementValue forKey:elementName];
Run Code Online (Sandbox Code Playgroud)

代码成功地将XML解析为testObj.然而,问题是在情况4中,"20"消失了.即一旦元素以数字开头,然后跟随汉字,数字就会消失.

此外,如果我使用:

        [currentElementValue appendString:string];
Run Code Online (Sandbox Code Playgroud)

代替:

        currentElementValue = 
            (NSMutableString *) [string stringByTrimmingCharactersInSet:
                [NSCharacterSet whitespaceAndNewlineCharacterSet]];
Run Code Online (Sandbox Code Playgroud)

元素可以显示所有字符,但以许多空格开头.

我想弄清楚为什么数字消失了,并寻找解决方案来显示没有空格领先的所有字符.

提前感谢您提供的任何帮助!

objective-c special-characters nsxmlparser ios

0
推荐指数
1
解决办法
516
查看次数

如何防止iOS 7 NSURLConnection使用缓存

问题:这个过程与iOS6完美配合.现在它不会提取最新信息并替换显示的数据.因此,应用程序信息总是错误的.如果我重置模拟器上的内容,它可以在当前时间段内工作.之后我将需要重新设置内容.有什么建议.我已经包含了处理我所有数据处理的3个文件以供参考.

Reader.M

- (void) startRequest
{
    NSURL *url = [[NSURL alloc] initWithString:@"http://www.something.com/app/rss/"];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:60.0f];
    NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
    if(conn)
    {
        _receivedData = [[NSMutableData alloc]init];
    }
}

#pragma mark - NSURLConnectionDataDelegate

- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"%@",error.description);
}

- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog(@"received %d bytes",data.length);
    [_receivedData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:_receivedData];
    JSTRRSSParser *rssParser = [[JSTRRSSParser alloc] init];
    parser.delegate = rssParser; …
Run Code Online (Sandbox Code Playgroud)

nsdictionary nsxmlparser nsmutablearray ios

0
推荐指数
1
解决办法
1401
查看次数

NSXMLParser不解析某些内容

我的iOS应用程序解析从远程服务器获取的xml(我不能以任何方式影响).当它遇到如下所示的xml标记时:

<tag a="x" b="y" c="z">
  this is a
  <aabb/>
  content
  <ccdd/>
  string
</tag>
Run Code Online (Sandbox Code Playgroud)

它只解析内容的第一部分("这是一个"),而忽略了这些单个标记之后的所有内容.无论这些单个标签中有多少个跟随,如果它只有一个标签,它也会跳过其余标签.我没有真正得到这种行为,是否有解释或方法来克服这个问题?

cocoa-touch objective-c nsxmlparser

-1
推荐指数
1
解决办法
447
查看次数