Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尽管有mysql条目,但iOS中的NSArray为空_Php_Ios_Xml_Nsarray - Fatal编程技术网

Php 尽管有mysql条目,但iOS中的NSArray为空

Php 尽管有mysql条目,但iOS中的NSArray为空,php,ios,xml,nsarray,Php,Ios,Xml,Nsarray,我一直在尝试用php脚本的xml输出填充Xcode中的数组,以便ios可以连接到mysql。然而,尽管mysql中有信息,我的数组还是会得到一个空值。这一定意味着我的属性部分或者我对xml的解析是错误的,但我真的不知道到底是什么错了(而且再多的注释似乎也没有帮助)。我没有从php或xcode中得到任何错误。有什么想法吗 编辑:我遵循了下面的建议,仍然得到一个空值,尽管我相信它来自我的php… - (void)viewDidLoad { [super viewDidLoad];

我一直在尝试用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();
?>

那么我应该把“oneam=[[NSMutableArray alloc]init];”放在哪里呢。 无论我放在哪里,它似乎都声明为空或空

每当我使用任何类型的数组时,我总是使用惰性初始化,因此如果它为null,则在getter方法中进行初始化,如下所示:

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

    return _oneam;
}
当我@synthesis时,我确保它的定义如下:

@synthesize oneam = _oneam; 

我不知道您是否在其他地方有它们,但是您缺少了我在进行.xml解析时经常使用的两个方法:foundCharacters和didEndElement。我接着看了(全部3个视频——大约40分钟),在几个不同的实例上使用它之后,它真的帮助我理解了如何使用NSXMLParser。也许可以尝试遵循他的方法,看看这是否能帮你解决问题。

除非你需要XML,否则我建议你使用JSON。它在整个网络中重量更轻,并且更容易在两侧格式化/解析。您是否检查过“elementName”是否有效?(即不为null)在分配“oneam”数组之前,您就开始解析XML。这就是为什么向其中添加对象是无效的。那么我应该将“oneam=[[NSMutableArray alloc]init];”放在哪里呢。无论我放在哪里,它似乎都声明为空或null…place
oneam=[NSMutableArray]在解析之前,去掉
oneam=[[NSMutableArray alloc]init]
在解析器尝试保存到
oneam
数组之后,您正在分配
oneam
数组,因此
oneam
当然将为null。我也尝试了您的方法,它也消除了null错误,但返回时说它现在为空。这是否意味着它来自上面的php?正如我所怀疑的,空值的原因来自php。谢谢你的链接。它帮我指明了正确的方向!啊,好吧,我没有php方面的经验,所以很抱歉,我不能提供更直接的帮助。很高兴你找到了答案。另外,如果你以一种与之前建议的答案无关的方式解决了问题,请确保添加自己的答案并接受它,这样将来出现类似问题的人都会知道你是如何解决的。嗯,我还没有从技术上解决它…所以我编辑了这个问题以反映进展。等我有了,我会的。啊哈!原来是因为我漏掉了我的情妇。你的教程帮我指出了正确的方向,所以我给了你荣誉