3

我一直在尝试用 php 脚本的 xml 输出填充 Xcode 中的数组,以便 ios 可以连接到 mysql。但是,尽管 mysql 中有信息,但我的数组仍然是一个空值。这一定意味着我的属性部分或我对 xml 的解析是错误的,但我真的不知道实际上是什么错误(并且没有多少星标似乎有帮助)。我没有从 php 或 xcode 中得到任何错误。有任何想法吗?

编辑:我遵循了以下建议,但我仍然得到一个空值,尽管我相信它来自我的 php ......

- (void)viewDidLoad
{
    [super viewDidLoad];

    char *cStr = "YES";
    NSString *str3 = [NSString stringWithUTF8String:cStr];


    NSString *urlString = [NSString stringWithFormat:@"(censored)", _login];

    NSXMLParser *Parser = [[[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]] autorelease];
    [Parser setDelegate:self];
    [Parser parse];


NSDictionary *itemAtIndex =(NSDictionary *)[oneam objectAtIndex:0];
  oneam = [[NSMutableArray alloc] init];   
    if (([[itemAtIndex objectForKey:@"its"]isEqualToString:str3 ])) {
            [switch1 setOn:YES animated:YES];
    }
    else {
            [switch1 setOn:NO animated:YES];
    }

}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

    if ( [elementName isEqualToString:@"location"]) {
        [oneam addObject:[[NSDictionary alloc] initWithDictionary:attributeDict]];
    NSLog(@"The array is %@", oneam);
    }
}

这是我的php ...

<?php

$login = "hello";
$dbh = new PDO('(censored)');
$sql = "SELECT oneam FROM login WHERE username = '$login'";

$q = $dbh->prepare( $sql );

$doc = new DOMDocument();
$r = $doc->createElement( "oneam" );
$doc->appendChild( $r );
foreach ( $q->fetchAll() as $row) {
    $e = $doc->createElement( "location" );

    $e->setAttribute( 'its', $row['oneam']);

    $r->appendChild( $e );

}
print $doc->saveXML();
?>
4

2 回答 2

0

那么我应该在哪里放置“oneam = [[NSMutableArray alloc] init];”。我放置的所有地方似乎都声明它为空或为空......

每当我使用任何类型的数组时,我总是使用延迟初始化,所以如果它为 null,它会在 getter 方法中初始化,如下所示:

-(NSMutableArray *)oneam
{
    if (!_oneam){
        _oneam = [[NSMutableArray alloc] init];
    }

    return _oneam;
}

当我@synthesize 时,我确保它的定义如下:

@synthesize oneam = _oneam; 
于 2012-11-06T17:59:32.903 回答
0

我不知道您是否可能在其他地方有它们,但是您缺少我在进行 .xml 解析时一直使用的两种方法:foundCharacters 和 didEndElement。我按照这个教程集(所有 3 个视频 - 大约 40 分钟),在几个不同的实例上使用它之后,它真的帮助我理解了如何使用 NSXMLParsers。也许尝试遵循他的方法,看看是否可以为您解决问题。

于 2012-11-06T18:47:52.170 回答